!function (n, t, i) {
    function e(n, t) {
        return typeof n === t
    }

    function st() {
        var i, n, u, f, o, h, t, s;
        for (s in c)if (c.hasOwnProperty(s)) {
            if (i = [], n = c[s], n.name && (i.push(n.name.toLowerCase()), n.options && n.options.aliases && n.options.aliases.length))for (u = 0; u < n.options.aliases.length; u++)i.push(n.options.aliases[u].toLowerCase());
            for (f = e(n.fn, "function") ? n.fn() : n.fn, o = 0; o < i.length; o++)h = i[o], t = h.split("."), 1 === t.length ? r[t[0]] = f : (!r[t[0]] || r[t[0]] instanceof Boolean || (r[t[0]] = new Boolean(r[t[0]])), r[t[0]][t[1]] = f), it.push((f ? "" : "no-") + t.join("-"))
        }
    }

    function k(n) {
        var t = s.className, i = r._config.classPrefix || "", u;
        (l && (t = t.baseVal), r._config.enableJSClass) && (u = new RegExp("(^|\\s)" + i + "no-js(\\s|$)"), t = t.replace(u, "$1" + i + "js$2"));
        r._config.enableClasses && (t += " " + i + n.join(" " + i), l ? s.className.baseVal = t : s.className = t)
    }

    function d(n, t) {
        var u, i, f;
        if ("object" == typeof n)for (u in n)ft(n, u) && d(u, n[u]); else {
            if (n = n.toLowerCase(), i = n.split("."), f = r[i[0]], 2 == i.length && (f = f[i[1]]), "undefined" != typeof f)return r;
            t = "function" == typeof t ? t() : t;
            1 == i.length ? r[i[0]] = t : (!r[i[0]] || r[i[0]] instanceof Boolean || (r[i[0]] = new Boolean(r[i[0]])), r[i[0]][i[1]] = t);
            k([(t && 0 != t ? "" : "no-") + i.join("-")]);
            r._trigger(n, t)
        }
        return r
    }

    function o() {
        return "function" != typeof t.createElement ? t.createElement(arguments[0]) : l ? t.createElementNS.call(t, "http://www.w3.org/2000/svg", arguments[0]) : t.createElement.apply(t, arguments)
    }

    function g(n) {
        return n.replace(/([a-z])-([a-z])/g, function (n, t, i) {
            return t + i.toUpperCase()
        }).replace(/^-/, "")
    }

    function ht() {
        var n = t.body;
        return n || (n = o(l ? "svg" : "body"), n.fake = !0), n
    }

    function nt(n, i, r, u) {
        var e, a, c, v, l = "modernizr", h = o("div"), f = ht();
        if (parseInt(r, 10))for (; r--;)c = o("div"), c.id = u ? u[r] : l + (r + 1), h.appendChild(c);
        return e = o("style"), e.type = "text/css", e.id = "s" + l, (f.fake ? f : h).appendChild(e), f.appendChild(h), e.styleSheet ? e.styleSheet.cssText = n : e.appendChild(t.createTextNode(n)), h.id = l, f.fake && (f.style.background = "", f.style.overflow = "hidden", v = s.style.overflow, s.style.overflow = "hidden", s.appendChild(f)), a = i(h, n), f.fake ? (f.parentNode.removeChild(f), s.style.overflow = v, s.offsetHeight) : h.parentNode.removeChild(h), !!a
    }

    function ct(n, t) {
        return !!~("" + n).indexOf(t)
    }

    function lt(n, t) {
        return function () {
            return n.apply(t, arguments)
        }
    }

    function at(n, t, i) {
        var r, u;
        for (u in n)if (n[u] in t)return i === !1 ? n[u] : (r = t[n[u]], e(r, "function") ? lt(r, i || t) : r);
        return !1
    }

    function tt(n) {
        return n.replace(/([A-Z])/g, function (n, t) {
            return "-" + t.toLowerCase()
        }).replace(/^ms-/, "-ms-")
    }

    function vt(t, r) {
        var f = t.length, u;
        if ("CSS" in n && "supports" in n.CSS) {
            for (; f--;)if (n.CSS.supports(tt(t[f]), r))return !0;
            return !1
        }
        if ("CSSSupportsRule" in n) {
            for (u = []; f--;)u.push("(" + tt(t[f]) + ":" + r + ")");
            return u = u.join(" or "), nt("@supports (" + u + ") { #modernizr { position: absolute; } }", function (n) {
                return "absolute" == getComputedStyle(n, null).position
            })
        }
        return i
    }

    function yt(n, t, r, u) {
        function c() {
            v && (delete f.style, delete f.modElem)
        }

        var l, v, h, y, s, p, a;
        if ((u = e(u, "undefined") ? !1 : u, !e(r, "undefined")) && (l = vt(n, r), !e(l, "undefined")))return l;
        for (a = ["modernizr", "tspan", "samp"]; !f.style && a.length;)v = !0, f.modElem = o(a.shift()), f.style = f.modElem.style;
        for (y = n.length, h = 0; y > h; h++)if (s = n[h], p = f.style[s], ct(s, "-") && (s = g(s)), f.style[s] !== i) {
            if (u || e(r, "undefined"))return c(), "pfx" == t ? s : !0;
            try {
                f.style[s] = r
            } catch (w) {
            }
            if (f.style[s] != p)return c(), "pfx" == t ? s : !0
        }
        return c(), !1
    }

    function v(n, t, i, r, u) {
        var f = n.charAt(0).toUpperCase() + n.slice(1), o = (n + " " + y.join(f + " ") + f).split(" ");
        return e(t, "string") || e(t, "undefined") ? yt(o, t, r, u) : (o = (n + " " + ut.join(f + " ") + f).split(" "), at(o, t, i))
    }

    var it = [], c = [], u = {
        _version: "3.3.1",
        _config: {classPrefix: "", enableClasses: !0, enableJSClass: !0, usePrefixes: !0},
        _q: [],
        on: function (n, t) {
            var i = this;
            setTimeout(function () {
                t(i[n])
            }, 0)
        },
        addTest: function (n, t, i) {
            c.push({name: n, fn: t, options: i})
        },
        addAsyncTest: function (n) {
            c.push({name: null, fn: n})
        }
    }, r = function () {
    }, h, ft, y, p, w, et, b, f, ot, a;
    r.prototype = u;
    r = new r;
    r.addTest("cookies", function () {
        try {
            t.cookie = "cookietest=1";
            var n = -1 != t.cookie.indexOf("cookietest=");
            return t.cookie = "cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT", n
        } catch (i) {
            return !1
        }
    });
    r.addTest("history", function () {
        var t = navigator.userAgent;
        return -1 === t.indexOf("Android 2.") && -1 === t.indexOf("Android 4.0") || -1 === t.indexOf("Mobile Safari") || -1 !== t.indexOf("Chrome") || -1 !== t.indexOf("Windows Phone") ? n.history && "pushState" in n.history : !1
    });
    r.addTest("sessionstorage", function () {
        var n = "modernizr";
        try {
            return sessionStorage.setItem(n, n), sessionStorage.removeItem(n), !0
        } catch (t) {
            return !1
        }
    });
    h = u._config.usePrefixes ? " -webkit- -moz- -o- -ms- ".split(" ") : ["", ""];
    u._prefixes = h;
    var s = t.documentElement, l = "svg" === s.nodeName.toLowerCase(), rt = "Moz O ms Webkit", ut = u._config.usePrefixes ? rt.toLowerCase().split(" ") : [];
    for (u._domPrefixes = ut, !function () {
        var n = {}.hasOwnProperty;
        ft = e(n, "undefined") || e(n.call, "undefined") ? function (n, t) {
                return t in n && e(n.constructor.prototype[t], "undefined")
            } : function (t, i) {
                return n.call(t, i)
            }
    }(), u._l = {}, u.on = function (n, t) {
        this._l[n] || (this._l[n] = []);
        this._l[n].push(t);
        r.hasOwnProperty(n) && setTimeout(function () {
            r._trigger(n, r[n])
        }, 0)
    }, u._trigger = function (n, t) {
        if (this._l[n]) {
            var i = this._l[n];
            setTimeout(function () {
                for (var r, n = 0; n < i.length; n++)(r = i[n])(t)
            }, 0);
            delete this._l[n]
        }
    }, r._q.push(function () {
        u.addTest = d
    }), y = u._config.usePrefixes ? rt.split(" ") : [], u._cssomPrefixes = y, p = function (t) {
        var u, s = h.length, f = n.CSSRule, r, e, o;
        if ("undefined" == typeof f)return i;
        if (!t)return !1;
        if (t = t.replace(/^@/, ""), u = t.replace(/-/g, "_").toUpperCase() + "_RULE", u in f)return "@" + t;
        for (r = 0; s > r; r++)if (e = h[r], o = e.toUpperCase() + "_" + u, o in f)return "@-" + e.toLowerCase() + "-" + t;
        return !1
    }, u.atRule = p, r.addTest("csspositionsticky", function () {
        var n = "position:", t = "sticky", r = o("a"), i = r.style;
        return i.cssText = n + h.join(t + ";" + n).slice(0, -n.length), -1 !== i.position.indexOf(t)
    }), w = function () {
        function n(n, t) {
            var u;
            return n ? (t && "string" != typeof t || (t = o(t || "div")), n = "on" + n, u = n in t, !u && r && (t.setAttribute || (t = o("div")), t.setAttribute(n, ""), u = "function" == typeof t[n], t[n] !== i && (t[n] = i), t.removeAttribute(n)), u) : !1
        }

        var r = !("onblur" in t.documentElement);
        return n
    }(), u.hasEvent = w, r.addTest("localstorage", function () {
        var n = "modernizr";
        try {
            return localStorage.setItem(n, n), localStorage.removeItem(n), !0
        } catch (t) {
            return !1
        }
    }), et = u.testStyles = nt, r.addTest("touchevents", function () {
        var i, r;
        return "ontouchstart" in n || n.DocumentTouch && t instanceof DocumentTouch ? i = !0 : (r = ["@media (", h.join("touch-enabled),("), "heartz", ")", "{#modernizr{top:9px;position:absolute}}"].join(""), et(r, function (n) {
                i = 9 === n.offsetTop
            })), i
    }), b = {elem: o("modernizr")}, r._q.push(function () {
        delete b.elem
    }), f = {style: b.elem.style}, r._q.unshift(function () {
        delete f.style
    }), u.testAllProps = v, ot = u.prefixed = function (n, t, i) {
        return 0 === n.indexOf("@") ? p(n) : (-1 != n.indexOf("-") && (n = g(n)), t ? v(n, t, i) : v(n, "pfx"))
    }, r.addTest("forcetouch", function () {
        return w(ot("mouseforcewillbegin", n, !1), n) ? MouseEvent.WEBKIT_FORCE_AT_MOUSE_DOWN && MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN : !1
    }), st(), k(it), delete u.addTest, delete u.addAsyncTest, a = 0; a < r._q.length; a++)r._q[a]();
    n.Modernizr = r
}(window, document), function () {
    var c = this, tt = c._, r = Array.prototype, p = Object.prototype, it = Function.prototype, w = r.push, t = r.slice, l = r.concat, u = p.toString, b = p.hasOwnProperty, rt = Array.isArray, k = Object.keys, a = it.bind, n = function (t) {
        return t instanceof n ? t : this instanceof n ? void(this._wrapped = t) : new n(t)
    }, i, v, e, f, o, s, nt, h;
    "undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = n), exports._ = n) : c._ = n;
    n.VERSION = "1.7.0";
    i = function (n, t, i) {
        if (t === void 0)return n;
        switch (null == i ? 3 : i) {
            case 1:
                return function (i) {
                    return n.call(t, i)
                };
            case 2:
                return function (i, r) {
                    return n.call(t, i, r)
                };
            case 3:
                return function (i, r, u) {
                    return n.call(t, i, r, u)
                };
            case 4:
                return function (i, r, u, f) {
                    return n.call(t, i, r, u, f)
                }
        }
        return function () {
            return n.apply(t, arguments)
        }
    };
    n.iteratee = function (t, r, u) {
        return null == t ? n.identity : n.isFunction(t) ? i(t, r, u) : n.isObject(t) ? n.matches(t) : n.property(t)
    };
    n.each = n.forEach = function (t, r, u) {
        var f, e, o;
        if (null == t)return t;
        if (r = i(r, u), e = t.length, e === +e)for (f = 0; e > f; f++)r(t[f], f, t); else for (o = n.keys(t), f = 0, e = o.length; e > f; f++)r(t[o[f]], o[f], t);
        return t
    };
    n.map = n.collect = function (t, i, r) {
        if (null == t)return [];
        i = n.iteratee(i, r);
        for (var f, e = t.length !== +t.length && n.keys(t), o = (e || t).length, s = Array(o), u = 0; o > u; u++)f = e ? e[u] : u, s[u] = i(t[f], f, t);
        return s
    };
    v = "Reduce of empty array with no initial value";
    n.reduce = n.foldl = n.inject = function (t, r, u, f) {
        null == t && (t = []);
        r = i(r, f, 4);
        var s, o = t.length !== +t.length && n.keys(t), h = (o || t).length, e = 0;
        if (arguments.length < 3) {
            if (!h)throw new TypeError(v);
            u = t[o ? o[e++] : e++]
        }
        for (; h > e; e++)s = o ? o[e] : e, u = r(u, t[s], s, t);
        return u
    };
    n.reduceRight = n.foldr = function (t, r, u, f) {
        null == t && (t = []);
        r = i(r, f, 4);
        var s, o = t.length !== +t.length && n.keys(t), e = (o || t).length;
        if (arguments.length < 3) {
            if (!e)throw new TypeError(v);
            u = t[o ? o[--e] : --e]
        }
        for (; e--;)s = o ? o[e] : e, u = r(u, t[s], s, t);
        return u
    };
    n.find = n.detect = function (t, i, r) {
        var u;
        return i = n.iteratee(i, r), n.some(t, function (n, t, r) {
            if (i(n, t, r))return (u = n, !0)
        }), u
    };
    n.filter = n.select = function (t, i, r) {
        var u = [];
        return null == t ? u : (i = n.iteratee(i, r), n.each(t, function (n, t, r) {
                i(n, t, r) && u.push(n)
            }), u)
    };
    n.reject = function (t, i, r) {
        return n.filter(t, n.negate(n.iteratee(i)), r)
    };
    n.every = n.all = function (t, i, r) {
        if (null == t)return !0;
        i = n.iteratee(i, r);
        for (var f, e = t.length !== +t.length && n.keys(t), o = (e || t).length, u = 0; o > u; u++)if (f = e ? e[u] : u, !i(t[f], f, t))return !1;
        return !0
    };
    n.some = n.any = function (t, i, r) {
        if (null == t)return !1;
        i = n.iteratee(i, r);
        for (var f, e = t.length !== +t.length && n.keys(t), o = (e || t).length, u = 0; o > u; u++)if (f = e ? e[u] : u, i(t[f], f, t))return !0;
        return !1
    };
    n.contains = n.include = function (t, i) {
        return null == t ? !1 : (t.length !== +t.length && (t = n.values(t)), n.indexOf(t, i) >= 0)
    };
    n.invoke = function (i, r) {
        var u = t.call(arguments, 2), f = n.isFunction(r);
        return n.map(i, function (n) {
            return (f ? r : n[r]).apply(n, u)
        })
    };
    n.pluck = function (t, i) {
        return n.map(t, n.property(i))
    };
    n.where = function (t, i) {
        return n.filter(t, n.matches(i))
    };
    n.findWhere = function (t, i) {
        return n.find(t, n.matches(i))
    };
    n.max = function (t, i, r) {
        var o, f, u = -1 / 0, s = -1 / 0, e, h;
        if (null == i && null != t)for (t = t.length === +t.length ? t : n.values(t), e = 0, h = t.length; h > e; e++)o = t[e], o > u && (u = o); else i = n.iteratee(i, r), n.each(t, function (n, t, r) {
            f = i(n, t, r);
            (f > s || f === -1 / 0 && u === -1 / 0) && (u = n, s = f)
        });
        return u
    };
    n.min = function (t, i, r) {
        var o, f, u = 1 / 0, s = 1 / 0, e, h;
        if (null == i && null != t)for (t = t.length === +t.length ? t : n.values(t), e = 0, h = t.length; h > e; e++)o = t[e], u > o && (u = o); else i = n.iteratee(i, r), n.each(t, function (n, t, r) {
            f = i(n, t, r);
            (s > f || 1 / 0 === f && 1 / 0 === u) && (u = n, s = f)
        });
        return u
    };
    n.shuffle = function (t) {
        for (var r, f = t && t.length === +t.length ? t : n.values(t), e = f.length, u = Array(e), i = 0; e > i; i++)r = n.random(0, i), r !== i && (u[i] = u[r]), u[r] = f[i];
        return u
    };
    n.sample = function (t, i, r) {
        return null == i || r ? (t.length !== +t.length && (t = n.values(t)), t[n.random(t.length - 1)]) : n.shuffle(t).slice(0, Math.max(0, i))
    };
    n.sortBy = function (t, i, r) {
        return i = n.iteratee(i, r), n.pluck(n.map(t, function (n, t, r) {
            return {value: n, index: t, criteria: i(n, t, r)}
        }).sort(function (n, t) {
            var i = n.criteria, r = t.criteria;
            if (i !== r) {
                if (i > r || i === void 0)return 1;
                if (r > i || r === void 0)return -1
            }
            return n.index - t.index
        }), "value")
    };
    e = function (t) {
        return function (i, r, u) {
            var f = {};
            return r = n.iteratee(r, u), n.each(i, function (n, u) {
                var e = r(n, u, i);
                t(f, n, e)
            }), f
        }
    };
    n.groupBy = e(function (t, i, r) {
        n.has(t, r) ? t[r].push(i) : t[r] = [i]
    });
    n.indexBy = e(function (n, t, i) {
        n[i] = t
    });
    n.countBy = e(function (t, i, r) {
        n.has(t, r) ? t[r]++ : t[r] = 1
    });
    n.sortedIndex = function (t, i, r, u) {
        var e;
        r = n.iteratee(r, u, 1);
        for (var s = r(i), f = 0, o = t.length; o > f;)e = f + o >>> 1, r(t[e]) < s ? f = e + 1 : o = e;
        return f
    };
    n.toArray = function (i) {
        return i ? n.isArray(i) ? t.call(i) : i.length === +i.length ? n.map(i, n.identity) : n.values(i) : []
    };
    n.size = function (t) {
        return null == t ? 0 : t.length === +t.length ? t.length : n.keys(t).length
    };
    n.partition = function (t, i, r) {
        i = n.iteratee(i, r);
        var u = [], f = [];
        return n.each(t, function (n, t, r) {
            (i(n, t, r) ? u : f).push(n)
        }), [u, f]
    };
    n.first = n.head = n.take = function (n, i, r) {
        if (null != n)return null == i || r ? n[0] : 0 > i ? [] : t.call(n, 0, i)
    };
    n.initial = function (n, i, r) {
        return t.call(n, 0, Math.max(0, n.length - (null == i || r ? 1 : i)))
    };
    n.last = function (n, i, r) {
        if (null != n)return null == i || r ? n[n.length - 1] : t.call(n, Math.max(n.length - i, 0))
    };
    n.rest = n.tail = n.drop = function (n, i, r) {
        return t.call(n, null == i || r ? 1 : i)
    };
    n.compact = function (t) {
        return n.filter(t, n.identity)
    };
    f = function (t, i, r, u) {
        var o, s, e;
        if (i && n.every(t, n.isArray))return l.apply(u, t);
        for (o = 0, s = t.length; s > o; o++)e = t[o], n.isArray(e) || n.isArguments(e) ? i ? w.apply(u, e) : f(e, i, r, u) : r || u.push(e);
        return u
    };
    n.flatten = function (n, t) {
        return f(n, t, !1, [])
    };
    n.without = function (i) {
        return n.difference(i, t.call(arguments, 1))
    };
    n.uniq = n.unique = function (t, i, r, u) {
        var f, h;
        if (null == t)return [];
        n.isBoolean(i) || (u = r, r = i, i = !1);
        null != r && (r = n.iteratee(r, u));
        for (var e = [], s = [], o = 0, c = t.length; c > o; o++)f = t[o], i ? (o && s === f || e.push(f), s = f) : r ? (h = r(f, o, t), n.indexOf(s, h) < 0 && (s.push(h), e.push(f))) : n.indexOf(e, f) < 0 && e.push(f);
        return e
    };
    n.union = function () {
        return n.uniq(f(arguments, !0, !0, []))
    };
    n.intersection = function (t) {
        var r, i;
        if (null == t)return [];
        for (var u = [], e = arguments.length, f = 0, o = t.length; o > f; f++)if (r = t[f], !n.contains(u, r)) {
            for (i = 1; e > i && n.contains(arguments[i], r); i++);
            i === e && u.push(r)
        }
        return u
    };
    n.difference = function (i) {
        var r = f(t.call(arguments, 1), !0, !0, []);
        return n.filter(i, function (t) {
            return !n.contains(r, t)
        })
    };
    n.zip = function (t) {
        if (null == t)return [];
        for (var r = n.max(arguments, "length").length, u = Array(r), i = 0; r > i; i++)u[i] = n.pluck(arguments, i);
        return u
    };
    n.object = function (n, t) {
        if (null == n)return {};
        for (var r = {}, i = 0, u = n.length; u > i; i++)t ? r[n[i]] = t[i] : r[n[i][0]] = n[i][1];
        return r
    };
    n.indexOf = function (t, i, r) {
        if (null == t)return -1;
        var u = 0, f = t.length;
        if (r) {
            if ("number" != typeof r)return u = n.sortedIndex(t, i), t[u] === i ? u : -1;
            u = 0 > r ? Math.max(0, f + r) : r
        }
        for (; f > u; u++)if (t[u] === i)return u;
        return -1
    };
    n.lastIndexOf = function (n, t, i) {
        if (null == n)return -1;
        var r = n.length;
        for ("number" == typeof i && (r = 0 > i ? r + i + 1 : Math.min(r, i + 1)); --r >= 0;)if (n[r] === t)return r;
        return -1
    };
    n.range = function (n, t, i) {
        arguments.length <= 1 && (t = n || 0, n = 0);
        i = i || 1;
        for (var u = Math.max(Math.ceil((t - n) / i), 0), f = Array(u), r = 0; u > r; r++, n += i)f[r] = n;
        return f
    };
    o = function () {
    };
    n.bind = function (i, r) {
        var u, f;
        if (a && i.bind === a)return a.apply(i, t.call(arguments, 1));
        if (!n.isFunction(i))throw new TypeError("Bind must be called on a function");
        return u = t.call(arguments, 2), f = function () {
            var e, s;
            return (this instanceof f) ? (o.prototype = i.prototype, e = new o, o.prototype = null, s = i.apply(e, u.concat(t.call(arguments))), n.isObject(s) ? s : e) : i.apply(r, u.concat(t.call(arguments)))
        }
    };
    n.partial = function (i) {
        var r = t.call(arguments, 1);
        return function () {
            for (var f = 0, t = r.slice(), u = 0, e = t.length; e > u; u++)t[u] === n && (t[u] = arguments[f++]);
            for (; f < arguments.length;)t.push(arguments[f++]);
            return i.apply(this, t)
        }
    };
    n.bindAll = function (t) {
        var i, r, u = arguments.length;
        if (1 >= u)throw new Error("bindAll must be passed function names");
        for (i = 1; u > i; i++)r = arguments[i], t[r] = n.bind(t[r], t);
        return t
    };
    n.memoize = function (t, i) {
        var r = function (u) {
            var f = r.cache, e = i ? i.apply(this, arguments) : u;
            return n.has(f, e) || (f[e] = t.apply(this, arguments)), f[e]
        };
        return r.cache = {}, r
    };
    n.delay = function (n, i) {
        var r = t.call(arguments, 2);
        return setTimeout(function () {
            return n.apply(null, r)
        }, i)
    };
    n.defer = function (i) {
        return n.delay.apply(n, [i, 1].concat(t.call(arguments, 1)))
    };
    n.throttle = function (t, i, r) {
        var f, e, s, u = null, o = 0, h;
        return r || (r = {}), h = function () {
            o = r.leading === !1 ? 0 : n.now();
            u = null;
            s = t.apply(f, e);
            u || (f = e = null)
        }, function () {
            var l = n.now(), c;
            return o || r.leading !== !1 || (o = l), c = i - (l - o), f = this, e = arguments, 0 >= c || c > i ? (clearTimeout(u), u = null, o = l, s = t.apply(f, e), u || (f = e = null)) : u || r.trailing === !1 || (u = setTimeout(h, c)), s
        }
    };
    n.debounce = function (t, i, r) {
        var u, f, e, s, o, h = function () {
            var c = n.now() - s;
            i > c && c > 0 ? u = setTimeout(h, i - c) : (u = null, r || (o = t.apply(e, f), u || (e = f = null)))
        };
        return function () {
            e = this;
            f = arguments;
            s = n.now();
            var c = r && !u;
            return u || (u = setTimeout(h, i)), c && (o = t.apply(e, f), e = f = null), o
        }
    };
    n.wrap = function (t, i) {
        return n.partial(i, t)
    };
    n.negate = function (n) {
        return function () {
            return !n.apply(this, arguments)
        }
    };
    n.compose = function () {
        var n = arguments, t = n.length - 1;
        return function () {
            for (var r = t, i = n[t].apply(this, arguments); r--;)i = n[r].call(this, i);
            return i
        }
    };
    n.after = function (n, t) {
        return function () {
            if (--n < 1)return t.apply(this, arguments)
        }
    };
    n.before = function (n, t) {
        var i;
        return function () {
            return --n > 0 ? i = t.apply(this, arguments) : t = null, i
        }
    };
    n.once = n.partial(n.before, 2);
    n.keys = function (t) {
        var i, r;
        if (!n.isObject(t))return [];
        if (k)return k(t);
        i = [];
        for (r in t)n.has(t, r) && i.push(r);
        return i
    };
    n.values = function (t) {
        for (var r = n.keys(t), u = r.length, f = Array(u), i = 0; u > i; i++)f[i] = t[r[i]];
        return f
    };
    n.pairs = function (t) {
        for (var r = n.keys(t), u = r.length, f = Array(u), i = 0; u > i; i++)f[i] = [r[i], t[r[i]]];
        return f
    };
    n.invert = function (t) {
        for (var u = {}, r = n.keys(t), i = 0, f = r.length; f > i; i++)u[t[r[i]]] = r[i];
        return u
    };
    n.functions = n.methods = function (t) {
        var r = [], i;
        for (i in t)n.isFunction(t[i]) && r.push(i);
        return r.sort()
    };
    n.extend = function (t) {
        if (!n.isObject(t))return t;
        for (var i, r, u = 1, f = arguments.length; f > u; u++) {
            i = arguments[u];
            for (r in i)b.call(i, r) && (t[r] = i[r])
        }
        return t
    };
    n.pick = function (r, u, f) {
        var e, o = {}, h, c, s, a;
        if (null == r)return o;
        if (n.isFunction(u)) {
            u = i(u, f);
            for (e in r)h = r[e], u(h, e, r) && (o[e] = h)
        } else for (c = l.apply([], t.call(arguments, 1)), r = new Object(r), s = 0, a = c.length; a > s; s++)e = c[s], e in r && (o[e] = r[e]);
        return o
    };
    n.omit = function (i, r, u) {
        if (n.isFunction(r)) r = n.negate(r); else {
            var f = n.map(l.apply([], t.call(arguments, 1)), String);
            r = function (t, i) {
                return !n.contains(f, i)
            }
        }
        return n.pick(i, r, u)
    };
    n.defaults = function (t) {
        var i, f, u, r;
        if (!n.isObject(t))return t;
        for (i = 1, f = arguments.length; f > i; i++) {
            u = arguments[i];
            for (r in u)t[r] === void 0 && (t[r] = u[r])
        }
        return t
    };
    n.clone = function (t) {
        return n.isObject(t) ? n.isArray(t) ? t.slice() : n.extend({}, t) : t
    };
    n.tap = function (n, t) {
        return t(n), n
    };
    s = function (t, i, r, f) {
        var l, a, o, h, e, c, v, y;
        if (t === i)return 0 !== t || 1 / t == 1 / i;
        if (null == t || null == i)return t === i;
        if (t instanceof n && (t = t._wrapped), i instanceof n && (i = i._wrapped), l = u.call(t), l !== u.call(i))return !1;
        switch (l) {
            case"[object RegExp]":
            case"[object String]":
                return "" + t == "" + i;
            case"[object Number]":
                return +t != +t ? +i != +i : 0 == +t ? 1 / +t == 1 / i : +t == +i;
            case"[object Date]":
            case"[object Boolean]":
                return +t == +i
        }
        if ("object" != typeof t || "object" != typeof i)return !1;
        for (a = r.length; a--;)if (r[a] === t)return f[a] === i;
        if (o = t.constructor, h = i.constructor, o !== h && "constructor" in t && "constructor" in i && !(n.isFunction(o) && o instanceof o && n.isFunction(h) && h instanceof h))return !1;
        if (r.push(t), f.push(i), "[object Array]" === l) {
            if (e = t.length, c = e === i.length)for (; e-- && (c = s(t[e], i[e], r, f)););
        } else if (y = n.keys(t), e = y.length, c = n.keys(i).length === e)for (; e-- && (v = y[e], c = n.has(i, v) && s(t[v], i[v], r, f)););
        return r.pop(), f.pop(), c
    };
    n.isEqual = function (n, t) {
        return s(n, t, [], [])
    };
    n.isEmpty = function (t) {
        if (null == t)return !0;
        if (n.isArray(t) || n.isString(t) || n.isArguments(t))return 0 === t.length;
        for (var i in t)if (n.has(t, i))return !1;
        return !0
    };
    n.isElement = function (n) {
        return !(!n || 1 !== n.nodeType)
    };
    n.isArray = rt || function (n) {
            return "[object Array]" === u.call(n)
        };
    n.isObject = function (n) {
        var t = typeof n;
        return "function" === t || "object" === t && !!n
    };
    n.each(["Arguments", "Function", "String", "Number", "Date", "RegExp"], function (t) {
        n["is" + t] = function (n) {
            return u.call(n) === "[object " + t + "]"
        }
    });
    n.isArguments(arguments) || (n.isArguments = function (t) {
        return n.has(t, "callee")
    });
    "function" != typeof/./ && (n.isFunction = function (n) {
        return "function" == typeof n || !1
    });
    n.isFinite = function (n) {
        return isFinite(n) && !isNaN(parseFloat(n))
    };
    n.isNaN = function (t) {
        return n.isNumber(t) && t !== +t
    };
    n.isBoolean = function (n) {
        return n === !0 || n === !1 || "[object Boolean]" === u.call(n)
    };
    n.isNull = function (n) {
        return null === n
    };
    n.isUndefined = function (n) {
        return n === void 0
    };
    n.has = function (n, t) {
        return null != n && b.call(n, t)
    };
    n.noConflict = function () {
        return c._ = tt, this
    };
    n.identity = function (n) {
        return n
    };
    n.constant = function (n) {
        return function () {
            return n
        }
    };
    n.noop = function () {
    };
    n.property = function (n) {
        return function (t) {
            return t[n]
        }
    };
    n.matches = function (t) {
        var i = n.pairs(t), r = i.length;
        return function (n) {
            var t, u, f;
            if (null == n)return !r;
            for (n = new Object(n), t = 0; r > t; t++)if (u = i[t], f = u[0], u[1] !== n[f] || !(f in n))return !1;
            return !0
        }
    };
    n.times = function (n, t, r) {
        var f = Array(Math.max(0, n)), u;
        for (t = i(t, r, 1), u = 0; n > u; u++)f[u] = t(u);
        return f
    };
    n.random = function (n, t) {
        return null == t && (t = n, n = 0), n + Math.floor(Math.random() * (t - n + 1))
    };
    n.now = Date.now || function () {
            return (new Date).getTime()
        };
    var d = {
        "&": "&amp;",
        "<": "&lt;",
        ">": "&gt;",
        '"': "&quot;",
        "'": "&#x27;",
        "`": "&#x60;"
    }, ut = n.invert(d), g = function (t) {
        var r = function (n) {
            return t[n]
        }, i = "(?:" + n.keys(t).join("|") + ")", u = RegExp(i), f = RegExp(i, "g");
        return function (n) {
            return n = null == n ? "" : "" + n, u.test(n) ? n.replace(f, r) : n
        }
    };
    n.escape = g(d);
    n.unescape = g(ut);
    n.result = function (t, i) {
        if (null == t)return void 0;
        var r = t[i];
        return n.isFunction(r) ? t[i]() : r
    };
    nt = 0;
    n.uniqueId = function (n) {
        var t = ++nt + "";
        return n ? n + t : t
    };
    n.templateSettings = {evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g};
    var y = /(.)^/, ft = {
        "'": "'",
        "\\": "\\",
        "\r": "r",
        "\n": "n",
        "\u2028": "u2028",
        "\u2029": "u2029"
    }, et = /\\|'|\r|\n|\u2028|\u2029/g, ot = function (n) {
        return "\\" + ft[n]
    };
    n.template = function (t, i, r) {
        var o, f, h;
        !i && r && (i = r);
        i = n.defaults({}, i, n.templateSettings);
        var c = RegExp([(i.escape || y).source, (i.interpolate || y).source, (i.evaluate || y).source].join("|") + "|$", "g"), e = 0, u = "__p+='";
        t.replace(c, function (n, i, r, f, o) {
            return u += t.slice(e, o).replace(et, ot), e = o + n.length, i ? u += "'+\n((__t=(" + i + "))==null?'':_.escape(__t))+\n'" : r ? u += "'+\n((__t=(" + r + "))==null?'':__t)+\n'" : f && (u += "';\n" + f + "\n__p+='"), n
        });
        u += "';\n";
        i.variable || (u = "with(obj||{}){\n" + u + "}\n");
        u = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + u + "return __p;\n";
        try {
            o = new Function(i.variable || "obj", "_", u)
        } catch (s) {
            throw s.source = u, s;
        }
        return f = function (t) {
            return o.call(this, t, n)
        }, h = i.variable || "obj", f.source = "function(" + h + "){\n" + u + "}", f
    };
    n.chain = function (t) {
        var i = n(t);
        return i._chain = !0, i
    };
    h = function (t) {
        return this._chain ? n(t).chain() : t
    };
    n.mixin = function (t) {
        n.each(n.functions(t), function (i) {
            var r = n[i] = t[i];
            n.prototype[i] = function () {
                var t = [this._wrapped];
                return w.apply(t, arguments), h.call(this, r.apply(n, t))
            }
        })
    };
    n.mixin(n);
    n.each(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function (t) {
        var i = r[t];
        n.prototype[t] = function () {
            var n = this._wrapped;
            return i.apply(n, arguments), "shift" !== t && "splice" !== t || 0 !== n.length || delete n[0], h.call(this, n)
        }
    });
    n.each(["concat", "join", "slice"], function (t) {
        var i = r[t];
        n.prototype[t] = function () {
            return h.call(this, i.apply(this._wrapped, arguments))
        }
    });
    n.prototype.value = function () {
        return this._wrapped
    };
    "function" == typeof define && define.amd && define("underscore", [], function () {
        return n
    })
}.call(this), function (n, t) {
    typeof exports == "object" ? module.exports = t() : typeof define == "function" && define.amd ? define(t) : n.printStackTrace = t()
}(this, function () {
    function n(t) {
        t = t || {guess: !0};
        var u = t.e || null, f = !!t.guess, e = t.mode || null, i = new n.implementation, r = i.run(u, e);
        return f ? i.guessAnonymousFunctions(r) : r
    }

    return n.implementation = function () {
    }, n.implementation.prototype = {
        run: function (n, t) {
            return n = n || this.createException(), t = t || this.mode(n), t === "other" ? this.other(arguments.callee) : this[t](n)
        }, createException: function () {
            try {
                this.undef()
            } catch (n) {
                return n
            }
        }, mode: function (n) {
            return typeof window != "undefined" && window.navigator.userAgent.indexOf("PhantomJS") > -1 ? "phantomjs" : n.arguments && n.stack ? "chrome" : n.stack && n.sourceURL ? "safari" : n.stack && n.number ? "ie" : n.stack && n.fileName ? "firefox" : n.message && n["opera#sourceloc"] ? n.stacktrace ? n.message.indexOf("\n") > -1 && n.message.split("\n").length > n.stacktrace.split("\n").length ? "opera9" : "opera10a" : "opera9" : n.message && n.stack && n.stacktrace ? n.stacktrace.indexOf("called from line") < 0 ? "opera10b" : "opera11" : n.stack && !n.fileName ? "chrome" : "other"
        }, instrumentFunction: function (t, i, r) {
            t = t || window;
            var u = t[i];
            t[i] = function () {
                return r.call(this, n().slice(4)), t[i]._instrumented.apply(this, arguments)
            };
            t[i]._instrumented = u
        }, deinstrumentFunction: function (n, t) {
            n[t].constructor === Function && n[t]._instrumented && n[t]._instrumented.constructor === Function && (n[t] = n[t]._instrumented)
        }, chrome: function (n) {
            return (n.stack + "\n").replace(/^[\s\S]+?\s+at\s+/, " at ").replace(/^\s+(at eval )?at\s+/gm, "").replace(/^([^\(]+?)([\n$])/gm, "{anonymous}() ($1)$2").replace(/^Object.<anonymous>\s*\(([^\)]+)\)/gm, "{anonymous}() ($1)").replace(/^(.+) \((.+)\)$/gm, "$1@$2").split("\n").slice(0, -1)
        }, safari: function (n) {
            return n.stack.replace(/\[native code\]\n/m, "").replace(/^(?=\w+Error\:).*$\n/m, "").replace(/^@/gm, "{anonymous}()@").split("\n")
        }, ie: function (n) {
            return n.stack.replace(/^\s*at\s+(.*)$/gm, "$1").replace(/^Anonymous function\s+/gm, "{anonymous}() ").replace(/^(.+)\s+\((.+)\)$/gm, "$1@$2").split("\n").slice(1)
        }, firefox: function (n) {
            return n.stack.replace(/(?:\n@:0)?\s+$/m, "").replace(/^(?:\((\S*)\))?@/gm, "{anonymous}($1)@").split("\n")
        }, opera11: function (n) {
            for (var u = n.stacktrace.split("\n"), f = [], t, o, r, i = 0, e = u.length; i < e; i += 2)t = /^.*line (\d+), column (\d+)(?: in (.+))? in (\S+):$/.exec(u[i]), t && (o = t[4] + ":" + t[1] + ":" + t[2], r = t[3] || "global code", r = r.replace(/<anonymous function: (\S+)>/, "$1").replace(/<anonymous function>/, "{anonymous}"), f.push(r + "@" + o + " -- " + u[i + 1].replace(/^\s+/, "")));
            return f
        }, opera10b: function (n) {
            for (var r = n.stacktrace.split("\n"), u = [], t, e, i = 0, f = r.length; i < f; i++)t = /^(.*)@(.+):(\d+)$/.exec(r[i]), t && (e = t[1] ? t[1] + "()" : "global code", u.push(e + "@" + t[2] + ":" + t[3]));
            return u
        }, opera10a: function (n) {
            for (var r = n.stacktrace.split("\n"), u = [], i, e, t = 0, f = r.length; t < f; t += 2)i = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i.exec(r[t]), i && (e = i[3] || "{anonymous}", u.push(e + "()@" + i[2] + ":" + i[1] + " -- " + r[t + 1].replace(/^\s+/, "")));
            return u
        }, opera9: function (n) {
            for (var r = n.message.split("\n"), u = [], i, t = 2, f = r.length; t < f; t += 2)i = /Line (\d+).*script (?:in )?(\S+)/i.exec(r[t]), i && u.push("{anonymous}()@" + i[2] + ":" + i[1] + " -- " + r[t + 1].replace(/^\s+/, ""));
            return u
        }, phantomjs: function (n) {
            for (var i = n.stack.split("\n"), u = [], r, t = 1, f = i.length; t < f; t++)i[t] = i[t].replace(/^\s+at\s+/gm, ""), r = /(\S+) \((\S+)\)/i.exec(i[t]), r ? u.push(r[1] + "()@" + r[2]) : u.push("{anonymous}()@" + i[t]);
            return u
        }, other: function (n) {
            for (var r = "{anonymous}", t = [], u, i, e = Array.prototype.slice; n && t.length < 10;) {
                u = /function(?:\s+([\w$]+))?\s*\(/.test(n.toString()) ? RegExp.$1 || r : r;
                try {
                    i = e.call(n.arguments || [])
                } catch (f) {
                    i = ["Cannot access arguments: " + f]
                }
                t[t.length] = u + "(" + this.stringifyArguments(i) + ")";
                try {
                    n = n.caller
                } catch (f) {
                    t[t.length] = "Cannot access caller: " + f;
                    break
                }
            }
            return t
        }, stringifyArguments: function (n) {
            for (var r = [], u = Array.prototype.slice, t, i = 0; i < n.length; ++i)t = n[i], t === undefined ? r[i] = "undefined" : t === null ? r[i] = "null" : t.constructor && (r[i] = t.constructor === Array ? t.length < 3 ? "[" + this.stringifyArguments(t) + "]" : "[" + this.stringifyArguments(u.call(t, 0, 1)) + "..." + this.stringifyArguments(u.call(t, -1)) + "]" : t.constructor === Object ? "#object" : t.constructor === Function ? "#function" : t.constructor === String ? '"' + t + '"' : t.constructor === Number ? t : "?");
            return r.join(",")
        }, sourceCache: {}, ajax: function (n) {
            var t = this.createXMLHTTPObject();
            if (t)try {
                return t.open("GET", n, !1), t.send(null), t.responseText
            } catch (i) {
            }
            return ""
        }, createXMLHTTPObject: function () {
            for (var i, t = [function () {
                return new XMLHttpRequest
            }, function () {
                return new ActiveXObject("Msxml2.XMLHTTP")
            }, function () {
                return new ActiveXObject("Msxml3.XMLHTTP")
            }, function () {
                return new ActiveXObject("Microsoft.XMLHTTP")
            }], n = 0; n < t.length; n++)try {
                return i = t[n](), this.createXMLHTTPObject = t[n], i
            } catch (r) {
            }
        }, isSameDomain: function (n) {
            return typeof location != "undefined" && n.indexOf(location.hostname) !== -1
        }, getSource: function (n) {
            return n in this.sourceCache || (this.sourceCache[n] = this.ajax(n).split("\n")), this.sourceCache[n]
        }, guessAnonymousFunctions: function (n) {
            for (var i, o, t = 0; t < n.length; ++t) {
                var u = n[t], f = /\{anonymous\}\(.*\)@(.*)/.exec(u);
                if (f && (i = /^(.*?)(?::(\d+))(?::(\d+))?(?: -- .+)?$/.exec(f[1]), i)) {
                    var r = i[1], e = i[2], s = i[3] || 0;
                    r && this.isSameDomain(r) && e && (o = this.guessAnonymousFunction(r, e, s), n[t] = u.replace("{anonymous}", o))
                }
            }
            return n
        }, guessAnonymousFunction: function (n, t) {
            var i;
            try {
                i = this.findFunctionName(this.getSource(n), t)
            } catch (r) {
                i = "getSource failed with url: " + n + ", exception: " + r.toString()
            }
            return i
        }, findFunctionName: function (n, t) {
            for (var u = "", r, o = Math.min(t, 20), i, e, f = 0; f < o; ++f)if (r = n[t - f - 1], e = r.indexOf("//"), e >= 0 && (r = r.substr(0, e)), r && ((u = r + u, i = /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/.exec(u), i && i[1]) || (i = /function\s+([^(]*?)\s*\(([^)]*)\)/.exec(u), i && i[1]) || (i = /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/.exec(u), i && i[1])))return i[1];
            return "(?)"
        }
    }, n
}), function (n, t, i) {
    "use strict";
    function v(n) {
        return function () {
            for (var i = arguments[0], u, t, r = "[" + (n ? n + ":" : "") + i + "] http://errors.angularjs.org/1.3.14/" + (n ? n + "/" : "") + i, i = 1; i < arguments.length; i++)r = r + (1 == i ? "?" : "&") + "p" + (i - 1) + "=", u = encodeURIComponent, t = arguments[i], t = "function" == typeof t ? t.toString().replace(/ \{[\s\S]*$/, "") : "undefined" == typeof t ? "undefined" : "string" != typeof t ? JSON.stringify(t) : t, r += u(t);
            return Error(r)
        }
    }

    function pi(n) {
        if (null == n || wi(n))return !1;
        var t = n.length;
        return n.nodeType === yt && t ? !0 : a(n) || s(n) || 0 === t || "number" == typeof t && 0 < t && t - 1 in n
    }

    function r(n, t, i) {
        var u, f, e;
        if (n)if (o(n))for (u in n)"prototype" == u || "length" == u || "name" == u || n.hasOwnProperty && !n.hasOwnProperty(u) || t.call(i, n[u], u, n); else if (s(n) || pi(n))for (e = "object" != typeof n, u = 0, f = n.length; u < f; u++)(e || u in n) && t.call(i, n[u], u, n); else if (n.forEach && n.forEach !== r) n.forEach(t, i, n); else for (u in n)n.hasOwnProperty(u) && t.call(i, n[u], u, n);
        return n
    }

    function lh(n, t, i) {
        for (var r = Object.keys(n).sort(), u = 0; u < r.length; u++)t.call(i, n[r[u]], r[u]);
        return r
    }

    function te(n) {
        return function (t, i) {
            n(i, t)
        }
    }

    function ah() {
        return ++vu
    }

    function ie(n, t) {
        t ? n.$$hashKey = t : delete n.$$hashKey
    }

    function l(n) {
        for (var t, u, e = n.$$hashKey, i = 1, o = arguments.length; i < o; i++)if (t = arguments[i], t)for (var f = Object.keys(t), r = 0, s = f.length; r < s; r++)u = f[r], n[u] = t[u];
        return ie(n, e), n
    }

    function g(n) {
        return parseInt(n, 10)
    }

    function du(n, t) {
        return l(Object.create(n), t)
    }

    function h() {
    }

    function ht(n) {
        return n
    }

    function tt(n) {
        return function () {
            return n
        }
    }

    function e(n) {
        return "undefined" == typeof n
    }

    function u(n) {
        return "undefined" != typeof n
    }

    function c(n) {
        return null !== n && "object" == typeof n
    }

    function a(n) {
        return "string" == typeof n
    }

    function b(n) {
        return "number" == typeof n
    }

    function ct(n) {
        return "[object Date]" === fi.call(n)
    }

    function o(n) {
        return "function" == typeof n
    }

    function br(n) {
        return "[object RegExp]" === fi.call(n)
    }

    function wi(n) {
        return n && n.window === n
    }

    function bi(n) {
        return n && n.$evalAsync && n.$watch
    }

    function ki(n) {
        return "boolean" == typeof n
    }

    function re(n) {
        return !(!n || !(n.nodeName || n.prop && n.attr && n.find))
    }

    function vh(n) {
        var i = {}, t;
        for (n = n.split(","), t = 0; t < n.length; t++)i[n[t]] = !0;
        return i
    }

    function pt(n) {
        return y(n.nodeName || n[0] && n[0].nodeName)
    }

    function di(n, t) {
        var i = n.indexOf(t);
        return 0 <= i && n.splice(i, 1), t
    }

    function ni(n, t, i, u) {
        var e, f, o;
        if (wi(n) || bi(n))throw ai("cpws");
        if (t) {
            if (n === t)throw ai("cpi");
            if (i = i || [], u = u || [], c(n)) {
                if (e = i.indexOf(n), -1 !== e)return u[e];
                i.push(n);
                u.push(t)
            }
            if (s(n))for (f = t.length = 0; f < n.length; f++)e = ni(n[f], null, i, u), c(n[f]) && (i.push(n[f]), u.push(e)), t.push(e); else {
                o = t.$$hashKey;
                s(t) ? t.length = 0 : r(t, function (n, i) {
                        delete t[i]
                    });
                for (f in n)n.hasOwnProperty(f) && (e = ni(n[f], null, i, u), c(n[f]) && (i.push(n[f]), u.push(e)), t[f] = e);
                ie(t, o)
            }
        } else(t = n) && (s(n) ? t = ni(n, [], i, u) : ct(n) ? t = new Date(n.getTime()) : br(n) ? (t = new RegExp(n.source, n.toString().match(/[^\/]*$/)[0]), t.lastIndex = n.lastIndex) : c(n) && (e = Object.create(Object.getPrototypeOf(n)), t = ni(n, e, i, u)));
        return t
    }

    function lt(n, t) {
        if (s(n)) {
            t = t || [];
            for (var i = 0, r = n.length; i < r; i++)t[i] = n[i]
        } else if (c(n))for (i in t = t || {}, n)("$" !== i.charAt(0) || "$" !== i.charAt(1)) && (t[i] = n[i]);
        return t || n
    }

    function it(n, t) {
        if (n === t)return !0;
        if (null === n || null === t)return !1;
        if (n !== n && t !== t)return !0;
        var u = typeof n, r;
        if (u == typeof t && "object" == u)if (s(n)) {
            if (!s(t))return !1;
            if ((u = n.length) == t.length) {
                for (r = 0; r < u; r++)if (!it(n[r], t[r]))return !1;
                return !0
            }
        } else {
            if (ct(n))return ct(t) ? it(n.getTime(), t.getTime()) : !1;
            if (br(n) && br(t))return n.toString() == t.toString();
            if (bi(n) || bi(t) || wi(n) || wi(t) || s(t))return !1;
            u = {};
            for (r in n)if ("$" !== r.charAt(0) && !o(n[r])) {
                if (!it(n[r], t[r]))return !1;
                u[r] = !0
            }
            for (r in t)if (!u.hasOwnProperty(r) && "$" !== r.charAt(0) && t[r] !== i && !o(t[r]))return !1;
            return !0
        }
        return !1
    }

    function gi(n, t, i) {
        return n.concat(or.call(t, i))
    }

    function ue(n, t) {
        var i = 2 < arguments.length ? or.call(arguments, 2) : [];
        return !o(t) || t instanceof RegExp ? t : i.length ? function () {
                    return arguments.length ? t.apply(n, gi(i, arguments, 0)) : t.apply(n, i)
                } : function () {
                    return arguments.length ? t.apply(n, arguments) : t.call(n)
                }
    }

    function yh(n, r) {
        var u = r;
        return "string" == typeof n && "$" === n.charAt(0) && "$" === n.charAt(1) ? u = i : wi(r) ? u = "$WINDOW" : r && t === r ? u = "$DOCUMENT" : bi(r) && (u = "$SCOPE"), u
    }

    function nr(n, t) {
        return "undefined" == typeof n ? i : (b(t) || (t = t ? 2 : null), JSON.stringify(n, yh, t))
    }

    function fe(n) {
        return a(n) ? JSON.parse(n) : n
    }

    function wt(n) {
        n = f(n).clone();
        try {
            n.empty()
        } catch (i) {
        }
        var t = f("<div>").append(n).html();
        try {
            return n[0].nodeType === pu ? y(t) : t.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, function (n, t) {
                    return "<" + y(t)
                })
        } catch (r) {
            return y(t)
        }
    }

    function ee(n) {
        try {
            return decodeURIComponent(n)
        } catch (t) {
        }
    }

    function oe(n) {
        var i = {}, f, t;
        return r((n || "").split("&"), function (n) {
            n && (f = n.replace(/\+/g, "%20").split("="), t = ee(f[0]), u(t) && (n = u(f[1]) ? ee(f[1]) : !0, fs.call(i, t) ? s(i[t]) ? i[t].push(n) : i[t] = [i[t], n] : i[t] = n))
        }), i
    }

    function gu(n) {
        var t = [];
        return r(n, function (n, i) {
            s(n) ? r(n, function (n) {
                    t.push(ti(i, !0) + (!0 === n ? "" : "=" + ti(n, !0)))
                }) : t.push(ti(i, !0) + (!0 === n ? "" : "=" + ti(n, !0)))
        }), t.length ? t.join("&") : ""
    }

    function kr(n) {
        return ti(n, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+")
    }

    function ti(n, t) {
        return encodeURIComponent(n).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%3B/gi, ";").replace(/%20/g, t ? "%20" : "+")
    }

    function ph(n, t) {
        var i, r, u = yu.length;
        for (n = f(n), r = 0; r < u; ++r)if (i = yu[r] + t, a(i = n.attr(i)))return i;
        return null
    }

    function wh(n, t) {
        var i, u, f = {};
        r(yu, function (t) {
            t += "app";
            !i && n.hasAttribute && n.hasAttribute(t) && (i = n, u = n.getAttribute(t))
        });
        r(yu, function (t) {
            t += "app";
            var r;
            !i && (r = n.querySelector("[" + t.replace(":", "\\:") + "]")) && (i = r, u = r.getAttribute(t))
        });
        i && (f.strictDi = null !== ph(i, "strict-di"), t(i, u ? [u] : [], f))
    }

    function se(i, u, e) {
        c(e) || (e = {});
        e = l({strictDi: !1}, e);
        var s = function () {
            if (i = f(i), i.injector()) {
                var n = i[0] === t ? "document" : wt(i);
                throw ai("btstrpd", n.replace(/</, "&lt;").replace(/>/, "&gt;"));
            }
            return u = u || [], u.unshift(["$provide", function (n) {
                n.value("$rootElement", i)
            }]), e.debugInfoEnabled && u.push(["$compileProvider", function (n) {
                n.debugInfoEnabled(!0)
            }]), u.unshift("ng"), n = rr(u, e.strictDi), n.invoke(["$rootScope", "$rootElement", "$compile", "$injector", function (n, t, i, r) {
                n.$apply(function () {
                    t.data("$injector", r);
                    i(t)(n)
                })
            }]), n
        }, h = /^NG_ENABLE_DEBUG_INFO!/, a = /^NG_DEFER_BOOTSTRAP!/;
        if (n && h.test(n.name) && (e.debugInfoEnabled = !0, n.name = n.name.replace(h, "")), n && !a.test(n.name))return s();
        n.name = n.name.replace(a, "");
        nt.resumeBootstrap = function (n) {
            return r(n, function (n) {
                u.push(n)
            }), s()
        };
        o(nt.resumeDeferredBootstrap) && nt.resumeDeferredBootstrap()
    }

    function bh() {
        n.name = "NG_ENABLE_DEBUG_INFO!" + n.name;
        n.location.reload()
    }

    function kh(n) {
        if (n = nt.element(n).injector(), !n)throw ai("test");
        return n.get("$$testability")
    }

    function he(n, t) {
        return t = t || "_", n.replace(fa, function (n, i) {
            return (i ? t : "") + n.toLowerCase()
        })
    }

    function dh() {
        var t;
        os || ((vt = n.jQuery) && vt.fn.on ? (f = vt, l(vt.fn, {
                scope: ei.scope,
                isolateScope: ei.isolateScope,
                controller: ei.controller,
                injector: ei.injector,
                inheritedData: ei.inheritedData
            }), t = vt.cleanData, vt.cleanData = function (n) {
                var u, i, r;
                if (vf) vf = !1; else for (i = 0; null != (r = n[i]); i++)(u = vt._data(r, "events")) && u.$destroy && vt(r).triggerHandler("$destroy");
                t(n)
            }) : f = w, nt.element = f, os = !0)
    }

    function nf(n, t, i) {
        if (!n)throw ai("areq", t || "?", i || "required");
        return n
    }

    function dr(n, t, i) {
        return i && s(n) && (n = n[n.length - 1]), nf(o(n), t, "not a function, got " + (n && "object" == typeof n ? n.constructor.name || "Object" : typeof n)), n
    }

    function si(n, t) {
        if ("hasOwnProperty" === n)throw ai("badname", t);
    }

    function ce(n, t, i) {
        if (!t)return n;
        t = t.split(".");
        for (var u, f = n, e = t.length, r = 0; r < e; r++)u = t[r], n && (n = (f = n)[u]);
        return !i && o(n) ? ue(f, n) : n
    }

    function gr(n) {
        var t = n[0], i;
        n = n[n.length - 1];
        i = [t];
        do {
            if (t = t.nextSibling, !t)break;
            i.push(t)
        } while (t !== n);
        return f(i)
    }

    function rt() {
        return Object.create(null)
    }

    function gh(n) {
        function t(n, t, i) {
            return n[t] || (n[t] = i())
        }

        var i = v("$injector"), r = v("ng");
        return n = t(n, "angular", Object), n.$$minErr = n.$$minErr || v, t(n, "module", function () {
            var n = {};
            return function (u, f, e) {
                if ("hasOwnProperty" === u)throw r("badname", "module");
                return f && n.hasOwnProperty(u) && (n[u] = null), t(n, u, function () {
                    function n(n, i, r, u) {
                        return u || (u = t), function () {
                            return u[r || "push"]([n, i, arguments]), h
                        }
                    }

                    if (!f)throw i("nomod", u);
                    var t = [], r = [], o = [], s = n("$injector", "invoke", "push", r), h = {
                        _invokeQueue: t,
                        _configBlocks: r,
                        _runBlocks: o,
                        requires: f,
                        name: u,
                        provider: n("$provide", "provider"),
                        factory: n("$provide", "factory"),
                        service: n("$provide", "service"),
                        value: n("$provide", "value"),
                        constant: n("$provide", "constant", "unshift"),
                        animation: n("$animateProvider", "register"),
                        filter: n("$filterProvider", "register"),
                        controller: n("$controllerProvider", "register"),
                        directive: n("$compileProvider", "directive"),
                        config: s,
                        run: function (n) {
                            return o.push(n), this
                        }
                    };
                    return e && s(e), h
                })
            }
        })
    }

    function nc(t) {
        l(t, {
            bootstrap: se,
            copy: ni,
            extend: l,
            equals: it,
            element: f,
            forEach: r,
            injector: rr,
            noop: h,
            bind: ue,
            toJson: nr,
            fromJson: fe,
            identity: ht,
            isUndefined: e,
            isDefined: u,
            isString: a,
            isFunction: o,
            isObject: c,
            isNumber: b,
            isElement: re,
            isArray: s,
            version: ea,
            isDate: ct,
            lowercase: y,
            uppercase: au,
            callbacks: {counter: 0},
            getTestability: kh,
            $$minErr: v,
            $$csp: hr,
            reloadWithDebugInfo: bh
        });
        sr = gh(n);
        try {
            sr("ngLocale")
        } catch (i) {
            sr("ngLocale", []).provider("$locale", nl)
        }
        sr("ng", ["ngLocale"], ["$provide", function (n) {
            n.provider({$$sanitizeUri: cl});
            n.provider("$compile", de).directive({
                a: bs,
                input: rh,
                textarea: rh,
                form: yv,
                script: hp,
                select: ap,
                style: yp,
                option: vp,
                ngBind: ty,
                ngBindHtml: ry,
                ngBindTemplate: iy,
                ngClass: fy,
                ngClassEven: oy,
                ngClassOdd: ey,
                ngCloak: sy,
                ngController: hy,
                ngForm: pv,
                ngHide: rp,
                ngIf: ly,
                ngInclude: ay,
                ngInit: yy,
                ngNonBindable: gy,
                ngPluralize: np,
                ngRepeat: tp,
                ngShow: ip,
                ngStyle: up,
                ngSwitch: fp,
                ngSwitchWhen: ep,
                ngSwitchDefault: op,
                ngOptions: lp,
                ngTransclude: sp,
                ngModel: by,
                ngList: py,
                ngChange: uy,
                pattern: sh,
                ngPattern: sh,
                required: oh,
                ngRequired: oh,
                minlength: ch,
                ngMinlength: ch,
                maxlength: hh,
                ngMaxlength: hh,
                ngValue: ny,
                ngModelOptions: dy
            }).directive({ngInclude: vy}).directive(yr).directive(uh);
            n.provider({
                $anchorScroll: ec,
                $animate: ba,
                $browser: hc,
                $cacheFactory: cc,
                $controller: ac,
                $document: vc,
                $exceptionHandler: yc,
                $filter: ao,
                $interpolate: dc,
                $interval: gc,
                $http: pc,
                $httpBackend: bc,
                $location: tl,
                $log: il,
                $parse: fl,
                $rootScope: hl,
                $q: el,
                $$q: ol,
                $sce: vl,
                $sceDelegate: al,
                $sniffer: yl,
                $templateCache: lc,
                $templateRequest: pl,
                $$testability: wl,
                $timeout: bl,
                $window: kl,
                $$rAF: sl,
                $$asyncCallback: oc,
                $$jqLite: uc
            })
        }])
    }

    function tr(n) {
        return n.replace(oa, function (n, t, i, r) {
            return r ? i.toUpperCase() : i
        }).replace(sa, "Moz$1")
    }

    function le(n) {
        return n = n.nodeType, n === yt || !n || 9 === n
    }

    function ae(n, t) {
        var i, u, f = t.createDocumentFragment(), e = [];
        if (pf.test(n)) {
            for (i = i || f.appendChild(t.createElement("div")), u = (la.exec(n) || ["", ""])[1].toLowerCase(), u = ft[u] || ft._default, i.innerHTML = u[1] + n.replace(aa, "<$1><\/$2>") + u[2], u = u[0]; u--;)i = i.lastChild;
            e = gi(e, i.childNodes);
            i = f.firstChild;
            i.textContent = ""
        } else e.push(t.createTextNode(n));
        return f.textContent = "", f.innerHTML = "", r(e, function (n) {
            f.appendChild(n)
        }), f
    }

    function w(n) {
        var i, r;
        if (n instanceof w)return n;
        if (a(n) && (n = p(n), i = !0), !(this instanceof w)) {
            if (i && "<" != n.charAt(0))throw yf("nosel");
            return new w(n)
        }
        i && (i = t, n = (r = ca.exec(n)) ? [i.createElement(r[1])] : (r = ae(n, i)) ? r.childNodes : []);
        ye(this, n)
    }

    function tf(n) {
        return n.cloneNode(!0)
    }

    function nu(n, t) {
        if (t || tu(n), n.querySelectorAll)for (var r = n.querySelectorAll("*"), i = 0, u = r.length; i < u; i++)tu(r[i])
    }

    function ve(n, t, i, f) {
        if (u(f))throw yf("offargs");
        var e = (f = iu(n)) && f.events, o = f && f.handle;
        if (o)if (t) r(t.split(" "), function (t) {
            if (u(i)) {
                var r = e[t];
                if (di(r || [], i), r && 0 < r.length)return
            }
            n.removeEventListener(t, o, !1);
            delete e[t]
        }); else for (t in e)"$destroy" !== t && n.removeEventListener(t, o, !1), delete e[t]
    }

    function tu(n, t) {
        var u = n.ng339, r = u && cr[u];
        r && (t ? delete r.data[t] : (r.handle && (r.events.$destroy && r.handle({}, "$destroy"), ve(n)), delete cr[u], n.ng339 = i))
    }

    function iu(n, t) {
        var r = n.ng339, r = r && cr[r];
        return t && !r && (n.ng339 = r = ++ss, r = cr[r] = {events: {}, data: {}, handle: i}), r
    }

    function rf(n, t, i) {
        if (le(n)) {
            var r = u(i), f = !r && t && !c(t), e = !t;
            if (n = (n = iu(n, !f)) && n.data, r) n[t] = i; else {
                if (e)return n;
                if (f)return n && n[t];
                l(n, t)
            }
        }
    }

    function ru(n, t) {
        return n.getAttribute ? -1 < (" " + (n.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").indexOf(" " + t + " ") : !1
    }

    function uu(n, t) {
        t && n.setAttribute && r(t.split(" "), function (t) {
            n.setAttribute("class", p((" " + (n.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").replace(" " + p(t) + " ", " ")))
        })
    }

    function fu(n, t) {
        if (t && n.setAttribute) {
            var i = (" " + (n.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ");
            r(t.split(" "), function (n) {
                n = p(n);
                -1 === i.indexOf(" " + n + " ") && (i += n + " ")
            });
            n.setAttribute("class", p(i))
        }
    }

    function ye(n, t) {
        var i, r;
        if (t)if (t.nodeType) n[n.length++] = t; else if (i = t.length, "number" == typeof i && t.window !== t) {
            if (i)for (r = 0; r < i; r++)n[n.length++] = t[r]
        } else n[n.length++] = t
    }

    function pe(n, t) {
        return eu(n, "$" + (t || "ngController") + "Controller")
    }

    function eu(n, t, r) {
        for (9 == n.nodeType && (n = n.documentElement), t = s(t) ? t : [t]; n;) {
            for (var u = 0, e = t.length; u < e; u++)if ((r = f.data(n, t[u])) !== i)return r;
            n = n.parentNode || 11 === n.nodeType && n.host
        }
    }

    function we(n) {
        for (nu(n, !0); n.firstChild;)n.removeChild(n.firstChild)
    }

    function be(n, t) {
        t || nu(n);
        var i = n.parentNode;
        i && i.removeChild(n)
    }

    function tc(t, i) {
        if (i = i || n, "complete" === i.document.readyState) i.setTimeout(t); else f(i).on("load", t)
    }

    function ke(n, t) {
        var i = lr[t.toLowerCase()];
        return i && wf[pt(n)] && i
    }

    function ic(n, t) {
        var i = n.nodeName;
        return ("INPUT" === i || "TEXTAREA" === i) && bf[t]
    }

    function rc(n, t) {
        var i = function (i, r) {
            var u, f, s, o;
            if (i.isDefaultPrevented = function () {
                    return i.defaultPrevented
                }, u = t[r || i.type], f = u ? u.length : 0, f)for (e(i.immediatePropagationStopped) && (s = i.stopImmediatePropagation, i.stopImmediatePropagation = function () {
                i.immediatePropagationStopped = !0;
                i.stopPropagation && i.stopPropagation();
                s && s.call(i)
            }), i.isImmediatePropagationStopped = function () {
                return !0 === i.immediatePropagationStopped
            }, 1 < f && (u = lt(u)), o = 0; o < f; o++)i.isImmediatePropagationStopped() || u[o].call(n, i)
        };
        return i.elem = n, i
    }

    function uc() {
        this.$get = function () {
            return l(w, {
                hasClass: function (n, t) {
                    return n.attr && (n = n[0]), ru(n, t)
                }, addClass: function (n, t) {
                    return n.attr && (n = n[0]), fu(n, t)
                }, removeClass: function (n, t) {
                    return n.attr && (n = n[0]), uu(n, t)
                }
            })
        }
    }

    function hi(n, t) {
        var i = n && n.$$hashKey;
        return i ? ("function" == typeof i && (i = n.$$hashKey()), i) : (i = typeof n, "function" == i || "object" == i && null !== n ? n.$$hashKey = i + ":" + (t || ah)() : i + ":" + n)
    }

    function ir(n, t) {
        if (t) {
            var i = 0;
            this.nextUid = function () {
                return ++i
            }
        }
        r(n, this.put, this)
    }

    function fc(n) {
        return (n = n.toString().replace(cs, "").match(hs)) ? "function(" + (n[1] || "").replace(/[\s\r\n]+/, " ") + ")" : "fn"
    }

    function rr(n, t) {
        function l(n) {
            return function (t, i) {
                if (c(t)) r(t, te(n)); else return n(t, i)
            }
        }

        function k(n, t) {
            if (si(n, "service"), (o(t) || s(t)) && (t = u.instantiate(t)), !t.$get)throw oi("pget", n);
            return y[n + "Provider"] = t
        }

        function rt(n, t) {
            return function () {
                var i = f.invoke(t, this);
                if (e(i))throw oi("undef", n);
                return i
            }
        }

        function p(n, t, i) {
            return k(n, {$get: !1 !== i ? rt(n, t) : t})
        }

        function d(n) {
            var t = [], i;
            return r(n, function (n) {
                function f(n) {
                    for (var i, r, t = 0, f = n.length; t < f; t++)i = n[t], r = u.get(i[0]), r[i[1]].apply(r, i[2])
                }

                if (!it.get(n)) {
                    it.put(n, !0);
                    try {
                        a(n) ? (i = sr(n), t = t.concat(d(i.requires)).concat(i._runBlocks), f(i._invokeQueue), f(i._configBlocks)) : o(n) ? t.push(u.invoke(n)) : s(n) ? t.push(u.invoke(n)) : dr(n, "module")
                    } catch (r) {
                        throw s(n) && (n = n[n.length - 1]), r.message && r.stack && -1 == r.stack.indexOf(r.message) && (r = r.message + "\n" + r.stack), oi("modulerr", n, r.stack || r.message || r);
                    }
                }
            }), t
        }

        function g(n, i) {
            function r(t, r) {
                if (n.hasOwnProperty(t)) {
                    if (n[t] === w)throw oi("cdep", t + " <- " + v.join(" <- "));
                    return n[t]
                }
                try {
                    return v.unshift(t), n[t] = w, n[t] = i(t, r)
                } catch (u) {
                    throw n[t] === w && delete n[t], u;
                } finally {
                    v.shift()
                }
            }

            function u(n, i, u, f) {
                "string" == typeof u && (f = u, u = null);
                for (var c = [], l = rr.$$annotate(n, t, f), e, o = 0, h = l.length; o < h; o++) {
                    if (e = l[o], "string" != typeof e)throw oi("itkn", e);
                    c.push(u && u.hasOwnProperty(e) ? u[e] : r(e, f))
                }
                return s(n) && (n = n[h]), n.apply(i, c)
            }

            return {
                invoke: u, instantiate: function (n, t, i) {
                    var r = Object.create((s(n) ? n[n.length - 1] : n).prototype || null);
                    return n = u(n, r, t, i), c(n) || o(n) ? n : r
                }, get: r, annotate: rr.$$annotate, has: function (t) {
                    return y.hasOwnProperty(t + "Provider") || n.hasOwnProperty(t)
                }
            }
        }

        t = !0 === t;
        var w = {}, v = [], it = new ir([], !0), y = {
            $provide: {
                provider: l(k),
                factory: l(p),
                service: l(function (n, t) {
                    return p(n, ["$injector", function (n) {
                        return n.instantiate(t)
                    }])
                }),
                value: l(function (n, t) {
                    return p(n, tt(t), !1)
                }),
                constant: l(function (n, t) {
                    si(n, "constant");
                    y[n] = t;
                    b[n] = t
                }),
                decorator: function (n, t) {
                    var i = u.get(n + "Provider"), r = i.$get;
                    i.$get = function () {
                        var n = f.invoke(r, i);
                        return f.invoke(t, null, {$delegate: n})
                    }
                }
            }
        }, u = y.$injector = g(y, function (n, t) {
            nt.isString(t) && v.push(t);
            throw oi("unpr", v.join(" <- "));
        }), b = {}, f = b.$injector = g(b, function (n, t) {
            var r = u.get(n + "Provider", t);
            return f.invoke(r.$get, r, i, n)
        });
        return r(d(n), function (n) {
            f.invoke(n || h)
        }), f
    }

    function ec() {
        var n = !0;
        this.disableAutoScrolling = function () {
            n = !1
        };
        this.$get = ["$window", "$location", "$rootScope", function (t, i, r) {
            function s(n) {
                var t = null;
                return Array.prototype.some.call(n, function (n) {
                    if ("a" === pt(n))return t = n, !0
                }), t
            }

            function u(n) {
                if (n) {
                    n.scrollIntoView();
                    var i;
                    i = f.yOffset;
                    o(i) ? i = i() : re(i) ? (i = i[0], i = "fixed" !== t.getComputedStyle(i).position ? 0 : i.getBoundingClientRect().bottom) : b(i) || (i = 0);
                    i && (n = n.getBoundingClientRect().top, t.scrollBy(0, n - i))
                } else t.scrollTo(0, 0)
            }

            function f() {
                var n = i.hash(), t;
                n ? (t = e.getElementById(n)) ? u(t) : (t = s(e.getElementsByName(n))) ? u(t) : "top" === n && u(null) : u(null)
            }

            var e = t.document;
            return n && r.$watch(function () {
                return i.hash()
            }, function (n, t) {
                n === t && "" === n || tc(function () {
                    r.$evalAsync(f)
                })
            }), f
        }]
    }

    function oc() {
        this.$get = ["$$rAF", "$timeout", function (n, t) {
            return n.supported ? function (t) {
                    return n(t)
                } : function (n) {
                    return t(n, 0, !1)
                }
        }]
    }

    function sc(n, t, u, o) {
        function nt(n) {
            try {
                n.apply(null, or.call(arguments, 1))
            } finally {
                if (v--, 0 === v)for (; k.length;)try {
                    k.pop()()
                } catch (t) {
                    u.error(t)
                }
            }
        }

        function pt(n, t) {
            (function i() {
                r(d, function (n) {
                    n()
                });
                ct = t(i, n)
            })()
        }

        function et() {
            tt();
            ot()
        }

        function tt() {
            c = n.history.state;
            c = e(c) ? null : c;
            it(c, ut) && (c = ut);
            ut = c
        }

        function ot() {
            (p !== s.url() || y !== c) && (p = s.url(), y = c, r(at, function (n) {
                n(s.url(), c)
            }))
        }

        function st(n) {
            try {
                return decodeURIComponent(n)
            } catch (t) {
                return n
            }
        }

        var s = this, w = t[0], l = n.location, rt = n.history, ht = n.setTimeout, wt = n.clearTimeout, b = {}, v, k, d, ct;
        s.isMock = !1;
        v = 0;
        k = [];
        s.$$completeOutstandingRequest = nt;
        s.$$incOutstandingRequestCount = function () {
            v++
        };
        s.notifyWhenNoOutstandingRequests = function (n) {
            r(d, function (n) {
                n()
            });
            0 === v ? n() : k.push(n)
        };
        d = [];
        s.addPollFn = function (n) {
            return e(ct) && pt(100, ht), d.push(n), n
        };
        var c, y, p = l.href, bt = t.find("base"), lt = null;
        tt();
        y = c;
        s.url = function (t, i, r) {
            var f, u;
            return (e(r) && (r = null), l !== n.location && (l = n.location), rt !== n.history && (rt = n.history), t) ? (f = y === r, p === t && (!o.history || f)) ? s : (u = p && ii(p) === ii(t), p = t, y = r, !o.history || u && f ? (u || (lt = t), i ? l.replace(t) : u ? (i = l, r = t.indexOf("#"), t = -1 === r ? "" : t.substr(r + 1), i.hash = t) : l.href = t) : (rt[i ? "replaceState" : "pushState"](r, "", t), tt(), y = c), s) : lt || l.href.replace(/%27/g, "'")
        };
        s.state = function () {
            return c
        };
        var at = [], vt = !1, ut = null;
        s.onUrlChange = function (t) {
            if (!vt) {
                if (o.history) f(n).on("popstate", et);
                f(n).on("hashchange", et);
                vt = !0
            }
            return at.push(t), t
        };
        s.$$checkUrlChange = ot;
        s.baseHref = function () {
            var n = bt.attr("href");
            return n ? n.replace(/^(https?\:)?\/\/[^\/]*/, "") : ""
        };
        var g = {}, ft = "", yt = s.baseHref();
        s.cookies = function (n, t) {
            var r, f, e, o;
            if (n) t === i ? w.cookie = encodeURIComponent(n) + "=;path=" + yt + ";expires=Thu, 01 Jan 1970 00:00:00 GMT" : a(t) && (r = (w.cookie = encodeURIComponent(n) + "=" + encodeURIComponent(t) + ";path=" + yt).length + 1, 4096 < r && u.warn("Cookie '" + n + "' possibly not set or overflowed because it was too large (" + r + " > 4096 bytes)!")); else {
                if (w.cookie !== ft)for (ft = w.cookie, r = ft.split("; "), g = {}, e = 0; e < r.length; e++)f = r[e], o = f.indexOf("="), 0 < o && (n = st(f.substring(0, o)), g[n] === i && (g[n] = st(f.substring(o + 1))));
                return g
            }
        };
        s.defer = function (n, t) {
            var i;
            return v++, i = ht(function () {
                delete b[i];
                nt(n)
            }, t || 0), b[i] = !0, i
        };
        s.defer.cancel = function (n) {
            return b[n] ? (delete b[n], wt(n), nt(h), !0) : !1
        }
    }

    function hc() {
        this.$get = ["$window", "$log", "$sniffer", "$document", function (n, t, i, r) {
            return new sc(n, r, t, i)
        }]
    }

    function cc() {
        this.$get = function () {
            function t(t, i) {
                function a(n) {
                    n != f && (r ? r == n && (r = n.n) : r = n, c(n.n, n.p), c(n, f), f = n, f.n = null)
                }

                function c(n, t) {
                    n != t && (n && (n.p = t), t && (t.n = n))
                }

                if (t in n)throw v("$cacheFactory")("iid", t);
                var s = 0, y = l({}, i, {id: t}), o = {}, h = i && i.capacity || Number.MAX_VALUE, u = {}, f = null, r = null;
                return n[t] = {
                    put: function (n, t) {
                        if (h < Number.MAX_VALUE) {
                            var i = u[n] || (u[n] = {key: n});
                            a(i)
                        }
                        if (!e(t))return n in o || s++, o[n] = t, s > h && this.remove(r.key), t
                    }, get: function (n) {
                        if (h < Number.MAX_VALUE) {
                            var t = u[n];
                            if (!t)return;
                            a(t)
                        }
                        return o[n]
                    }, remove: function (n) {
                        if (h < Number.MAX_VALUE) {
                            var t = u[n];
                            if (!t)return;
                            t == f && (f = t.p);
                            t == r && (r = t.n);
                            c(t.n, t.p);
                            delete u[n]
                        }
                        delete o[n];
                        s--
                    }, removeAll: function () {
                        o = {};
                        s = 0;
                        u = {};
                        f = r = null
                    }, destroy: function () {
                        u = y = o = null;
                        delete n[t]
                    }, info: function () {
                        return l({}, y, {size: s})
                    }
                }
            }

            var n = {};
            return t.info = function () {
                var t = {};
                return r(n, function (n, i) {
                    t[i] = n.info()
                }), t
            }, t.get = function (t) {
                return n[t]
            }, t
        }
    }

    function lc() {
        this.$get = ["$cacheFactory", function (n) {
            return n("templates")
        }]
    }

    function de(n, e) {
        function b(n, t) {
            var u = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/, i = {};
            return r(n, function (n, r) {
                var f = n.match(u);
                if (!f)throw et("iscp", t, r, n);
                i[r] = {mode: f[1][0], collection: "*" === f[2], optional: "?" === f[3], attrName: f[4] || r}
            }), i
        }

        var w = {}, k = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/, d = /(([\w\-]+)(?:\:([^;]+))?;?)/, g = vh("ngSrc,ngSrcset,src,srcset"), nt = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/, ut = /^(on[a-z]+|formaction)$/, v;
        this.directive = function ft(t, i) {
            return si(t, "directive"), a(t) ? (nf(i, "directiveFactory"), w.hasOwnProperty(t) || (w[t] = [], n.factory(t + "Directive", ["$injector", "$exceptionHandler", function (n, i) {
                    var u = [];
                    return r(w[t], function (r, f) {
                        try {
                            var e = n.invoke(r);
                            o(e) ? e = {compile: tt(e)} : !e.compile && e.link && (e.compile = tt(e.link));
                            e.priority = e.priority || 0;
                            e.index = f;
                            e.name = e.name || t;
                            e.require = e.require || e.controller && e.name;
                            e.restrict = e.restrict || "EA";
                            c(e.scope) && (e.$$isolateBindings = b(e.scope, e.name));
                            u.push(e)
                        } catch (s) {
                            i(s)
                        }
                    }), u
                }])), w[t].push(i)) : r(t, te(ft)), this
        };
        this.aHrefSanitizationWhitelist = function (n) {
            return u(n) ? (e.aHrefSanitizationWhitelist(n), this) : e.aHrefSanitizationWhitelist()
        };
        this.imgSrcSanitizationWhitelist = function (n) {
            return u(n) ? (e.imgSrcSanitizationWhitelist(n), this) : e.imgSrcSanitizationWhitelist()
        };
        v = !0;
        this.debugInfoEnabled = function (n) {
            return u(n) ? (v = n, this) : v
        };
        this.$get = ["$injector", "$interpolate", "$exceptionHandler", "$templateRequest", "$parse", "$controller", "$rootScope", "$document", "$sce", "$animate", "$$sanitizeUri", function (n, u, e, b, tt, ft, ot, st, ct, lt, at) {
            function gt(n, t) {
                try {
                    n.addClass(t)
                } catch (i) {
                }
            }

            function kt(n, t, i, u, e) {
                var s, o;
                return n instanceof f || (n = f(n)), r(n, function (t, i) {
                    t.nodeType == pu && t.nodeValue.match(/\S+/) && (n[i] = f(t).wrap("<span><\/span>").parent()[0])
                }), s = ri(n, t, n, i, u, e), kt.$$addScopeClass(n), o = null, function (t, i, r) {
                    var u, e, h;
                    if (nf(t, "scope"), r = r || {}, u = r.parentBoundTranscludeFn, e = r.transcludeControllers, r = r.futureParentElement, u && u.$$boundTransclude && (u = u.$$boundTransclude), o || (o = (r = r && r[0]) ? "foreignobject" !== pt(r) && r.toString().match(/SVG/) ? "svg" : "html" : "html"), r = "html" !== o ? f(fi(o, f("<div>").append(n).html())) : i ? ei.clone.call(n) : n, e)for (h in e)r.data("$" + h + "Controller", e[h].instance);
                    return kt.$$addScopeInfo(r, t), i && i(r, t), s && s(t, r, r, u), r
                }
            }

            function ri(n, t, r, u, e, o) {
                function p(n, r, u, e) {
                    var h, c, l, o, y, p, a;
                    if (v)for (a = Array(r.length), o = 0; o < s.length; o += 3)h = s[o], a[h] = r[h]; else a = r;
                    for (o = 0, y = s.length; o < y;)c = a[s[o++]], r = s[o++], h = s[o++], r ? (r.scope ? (l = n.$new(), kt.$$addScopeInfo(f(c), l)) : l = n, p = r.transcludeOnThisElement ? ni(n, r.transclude, e, r.elementTranscludeOnThisElement) : !r.templateOnThisElement && e ? e : !e && t ? ni(n, t) : null, r(h, l, c, u, p)) : h && h(n, c.childNodes, i, e)
                }

                for (var s = [], h, l, a, y, v, c = 0; c < n.length; c++)h = new oi, l = ui(n[c], [], h, 0 === c ? u : i, e), (o = l.length ? ci(l, n[c], h, t, r, null, [], [], o) : null) && o.scope && kt.$$addScopeClass(h.$$element), h = o && o.terminal || !(a = n[c].childNodes) || !a.length ? null : ri(a, o ? (o.transcludeOnThisElement || !o.templateOnThisElement) && o.transclude : t), (o || h) && (s.push(c, o, h), y = !0, v = v || o), o = null;
                return y ? p : null
            }

            function ni(n, t, i) {
                return function (r, u, f, e, o) {
                    return r || (r = n.$new(!1, o), r.$$transcluded = !0), t(r, u, {
                        parentBoundTranscludeFn: i,
                        transcludeControllers: f,
                        futureParentElement: e
                    })
                }
            }

            function ui(n, t, i, r, u) {
                var b = i.$attr, e, v, y, w;
                switch (n.nodeType) {
                    case yt:
                        ti(t, bt(pt(n)), "E", r, u);
                        for (var f, o, s, h = n.attributes, l = 0, g = h && h.length; l < g; l++)v = !1, y = !1, f = h[l], e = f.name, o = p(f.value), f = bt(e), (s = fr.test(f)) && (e = e.replace(ls, "").substr(8).replace(/_(.)/g, function (n, t) {
                            return t.toUpperCase()
                        })), w = f.replace(/(Start|End)$/, ""), gi(w) && f === w + "Start" && (v = e, y = e.substr(0, e.length - 5) + "end", e = e.substr(0, e.length - 6)), f = bt(e.toLowerCase()), b[f] = e, (s || !i.hasOwnProperty(f)) && (i[f] = o, ke(n, f) && (i[f] = !0)), ur(n, t, o, f, s), ti(t, f, "A", r, u, v, y);
                        if (n = n.className, c(n) && (n = n.animVal), a(n) && "" !== n)for (; e = d.exec(n);)f = bt(e[2]), ti(t, f, "C", r, u) && (i[f] = p(e[3])), n = n.substr(e.index + e[0].length);
                        break;
                    case pu:
                        ir(t, n.nodeValue);
                        break;
                    case 8:
                        try {
                            (e = k.exec(n.nodeValue)) && (f = bt(e[1]), ti(t, f, "M", r, u) && (i[f] = p(e[2])))
                        } catch (nt) {
                        }
                }
                return t.sort(tr), t
            }

            function si(n, t, i) {
                var r = [], u = 0;
                if (t && n.hasAttribute && n.hasAttribute(t)) {
                    do {
                        if (!n)throw et("uterdir", t, i);
                        n.nodeType == yt && (n.hasAttribute(t) && u++, n.hasAttribute(i) && u--);
                        r.push(n);
                        n = n.nextSibling
                    } while (0 < u)
                } else r.push(n);
                return f(r)
            }

            function hi(n, t, i) {
                return function (r, u, f, e, o) {
                    return u = si(u[0], t, i), n(r, u, f, e, o)
                }
            }

            function ci(n, h, l, v, y, w, b, k, d) {
                function tr(n, t, i, r) {
                    n && (i && (n = hi(n, i, r)), n.require = g.require, n.directiveName = st, (ut === g || g.$$isolateScope) && (n = vi(n, {isolateScope: !0})), b.push(n));
                    t && (i && (t = hi(t, i, r)), t.require = g.require, t.directiveName = st, (ut === g || g.$$isolateScope) && (t = vi(t, {isolateScope: !0})), k.push(t))
                }

                function wi(n, t, i, u) {
                    var f, o = "data", h = !1, c = i, e;
                    if (a(t)) {
                        if (e = t.match(nt), t = t.substring(e[0].length), e[3] && (e[1] ? e[3] = null : e[1] = e[3]), "^" === e[1] ? o = "inheritedData" : "^^" === e[1] && (o = "inheritedData", c = i.parent()), "?" === e[2] && (h = !0), f = null, u && "data" === o && (f = u[t]) && (f = f.instance), f = f || c[o]("$" + t + "Controller"), !f && !h)throw et("ctreq", t, n);
                        return f || null
                    }
                    return s(t) && (f = [], r(t, function (t) {
                        f.push(wi(n, t, i, u))
                    })), f
                }

                function ht(n, t, e, o, s) {
                    function ot(n, t, r) {
                        var u;
                        return bi(n) || (r = t, t = n, n = i), pt && (u = w), r || (r = pt ? a.parent() : a), s(n, t, u, r, nt)
                    }

                    var rt, v, g, p, w, d, a, c, y, nt;
                    for (h === e ? (c = l, a = l.$$element) : (a = f(e), c = new oi(a, l)), ut && (p = t.$new(!0)), s && (d = ot, d.$$boundTransclude = s), lt && (at = {}, w = {}, r(lt, function (n) {
                        var i = {$scope: n === ut || n.$$isolateScope ? p : t, $element: a, $attrs: c, $transclude: d};
                        g = n.controller;
                        "@" == g && (g = c[n.name]);
                        i = ft(g, i, !0, n.controllerAs);
                        w[n.name] = i;
                        pt || a.data("$" + n.name + "Controller", i.instance);
                        at[n.name] = i
                    })), ut && (kt.$$addScopeInfo(a, p, !0, !(ct && (ct === ut || ct === ut.$$originalDirective))), kt.$$addScopeClass(a, !0), o = at && at[ut.name], y = p, o && o.identifier && !0 === ut.bindToController && (y = o.instance), r(p.$$isolateBindings = ut.$$isolateBindings, function (n, i) {
                        var r = n.attrName, e = n.optional, o, f, h, s;
                        switch (n.mode) {
                            case"@":
                                c.$observe(r, function (n) {
                                    y[i] = n
                                });
                                c.$$observers[r].$$scope = t;
                                c[r] && (y[i] = u(c[r])(t));
                                break;
                            case"=":
                                if (e && !c[r])break;
                                f = tt(c[r]);
                                s = f.literal ? it : function (n, t) {
                                        return n === t || n !== n && t !== t
                                    };
                                h = f.assign || function () {
                                        o = y[i] = f(t);
                                        throw et("nonassign", c[r], ut.name);
                                    };
                                o = y[i] = f(t);
                                e = function (n) {
                                    return s(n, y[i]) || (s(n, o) ? h(t, n = y[i]) : y[i] = n), o = n
                                };
                                e.$stateful = !0;
                                e = n.collection ? t.$watchCollection(c[r], e) : t.$watch(tt(c[r], e), null, f.literal);
                                p.$on("$destroy", e);
                                break;
                            case"&":
                                f = tt(c[r]);
                                y[i] = function (n) {
                                    return f(t, n)
                                }
                        }
                    })), at && (r(at, function (n) {
                        n()
                    }), at = null), o = 0, rt = b.length; o < rt; o++)v = b[o], yi(v, v.isolateScope ? p : t, a, c, v.require && wi(v.directiveName, v.require, a, w), d);
                    for (nt = t, ut && (ut.template || null === ut.templateUrl) && (nt = p), n && n(nt, e.childNodes, i, s), o = k.length - 1; 0 <= o; o--)v = k[o], yi(v, v.isolateScope ? p : t, a, c, v.require && wi(v.directiveName, v.require, a, w), d)
                }

                var ei, pi, ir;
                d = d || {};
                for (var ni = -Number.MAX_VALUE, ti, lt = d.controllerDirectives, at, ut = d.newIsolateScopeDirective, ct = d.templateDirective, ci = d.nonTlbTranscludeDirective, di = !1, gi = !1, pt = d.hasElementTranscludeDirective, ot = l.$$element = f(h), g, st, rt, ri = v, bt, vt = 0, gt = n.length; vt < gt; vt++) {
                    if (g = n[vt], ei = g.$$start, pi = g.$$end, ei && (ot = si(h, ei, pi)), rt = i, ni > g.priority)break;
                    if ((rt = g.scope) && (g.templateUrl || (c(rt) ? (dt("new/isolated scope", ut || ti, g, ot), ut = g) : dt("new/isolated scope", ut, g, ot)), ti = ti || g), st = g.name, !g.templateUrl && g.controller && (rt = g.controller, lt = lt || {}, dt("'" + st + "' controller", lt[st], g, ot), lt[st] = g), (rt = g.transclude) && (di = !0, g.$$tlb || (dt("transclusion", ci, g, ot), ci = g), "element" == rt ? (pt = !0, ni = g.priority, rt = ot, ot = l.$$element = f(t.createComment(" " + st + ": " + l[st] + " ")), h = ot[0], ii(y, or.call(rt, 0), h), ri = kt(rt, v, ni, w && w.name, {nonTlbTranscludeDirective: ci})) : (rt = f(tf(h)).contents(), ot.empty(), ri = kt(rt, v))), g.template)if (gi = !0, dt("template", ct, g, ot), ct = g, rt = o(g.template) ? g.template(ot, l) : g.template, rt = ki(rt), g.replace) {
                        if (w = g, rt = pf.test(rt) ? no(fi(g.templateNamespace, p(rt))) : [], h = rt[0], 1 != rt.length || h.nodeType !== yt)throw et("tplrt", st, "");
                        ii(y, ot, h);
                        gt = {$attr: {}};
                        rt = ui(h, [], gt);
                        ir = n.splice(vt + 1, n.length - (vt + 1));
                        ut && li(rt);
                        n = n.concat(rt).concat(ir);
                        ai(l, gt);
                        gt = n.length
                    } else ot.html(rt);
                    if (g.templateUrl) gi = !0, dt("template", ct, g, ot), ct = g, g.replace && (w = g), ht = nr(n.splice(vt, n.length - vt), ot, l, y, di && ri, b, k, {
                        controllerDirectives: lt,
                        newIsolateScopeDirective: ut,
                        templateDirective: ct,
                        nonTlbTranscludeDirective: ci
                    }), gt = n.length; else if (g.compile)try {
                        bt = g.compile(ot, l, ri);
                        o(bt) ? tr(null, bt, ei, pi) : bt && tr(bt.pre, bt.post, ei, pi)
                    } catch (rr) {
                        e(rr, wt(ot))
                    }
                    g.terminal && (ht.terminal = !0, ni = Math.max(ni, g.priority))
                }
                return ht.scope = ti && !0 === ti.scope, ht.transcludeOnThisElement = di, ht.elementTranscludeOnThisElement = pt, ht.templateOnThisElement = gi, ht.transclude = ri, d.hasElementTranscludeDirective = pt, ht
            }

            function li(n) {
                for (var t = 0, i = n.length; t < i; t++)n[t] = du(n[t], {$$isolateScope: !0})
            }

            function ti(t, r, u, f, o, s, h) {
                var c, l, a;
                if (r === o)return null;
                if (o = null, w.hasOwnProperty(r))for (r = n.get(r + "Directive"), l = 0, a = r.length; l < a; l++)try {
                    c = r[l];
                    (f === i || f > c.priority) && -1 != c.restrict.indexOf(u) && (s && (c = du(c, {
                        $$start: s,
                        $$end: h
                    })), t.push(c), o = c)
                } catch (v) {
                    e(v)
                }
                return o
            }

            function gi(t) {
                if (w.hasOwnProperty(t))for (var r = n.get(t + "Directive"), i = 0, u = r.length; i < u; i++)if (t = r[i], t.multiElement)return !0;
                return !1
            }

            function ai(n, t) {
                var u = t.$attr, f = n.$attr, i = n.$$element;
                r(n, function (i, r) {
                    "$" != r.charAt(0) && (t[r] && t[r] !== i && (i += ("style" === r ? ";" : " ") + t[r]), n.$set(r, i, !0, u[r]))
                });
                r(t, function (t, r) {
                    "class" == r ? (gt(i, t), n["class"] = (n["class"] ? n["class"] + " " : "") + t) : "style" == r ? (i.attr("style", i.attr("style") + ";" + t), n.style = (n.style ? n.style + ";" : "") + t) : "$" == r.charAt(0) || n.hasOwnProperty(r) || (n[r] = t, f[r] = u[r])
                })
            }

            function nr(n, t, i, u, e, s, h, l) {
                var v = [], y, w, k = t[0], a = n.shift(), g = du(a, {
                    templateUrl: null,
                    transclude: null,
                    replace: null,
                    $$originalDirective: a
                }), d = o(a.templateUrl) ? a.templateUrl(t, i) : a.templateUrl, nt = a.templateNamespace;
                return t.empty(), b(ct.getTrustedResourceUrl(d)).then(function (o) {
                    var b, it, tt, ut;
                    if (o = ki(o), a.replace) {
                        if (o = pf.test(o) ? no(fi(nt, p(o))) : [], b = o[0], 1 != o.length || b.nodeType !== yt)throw et("tplrt", a.name, d);
                        o = {$attr: {}};
                        ii(u, t, b);
                        tt = ui(b, [], o);
                        c(a.scope) && li(tt);
                        n = tt.concat(n);
                        ai(i, o)
                    } else b = k, t.html(o);
                    for (n.unshift(g), y = ci(n, b, i, e, t, a, s, h, l), r(u, function (n, i) {
                        n == b && (u[i] = t[0])
                    }), w = ri(t[0].childNodes, e); v.length;) {
                        o = v.shift();
                        it = v.shift();
                        var ft = v.shift(), rt = v.shift(), tt = t[0];
                        o.$$destroyed || (it !== k && (ut = it.className, l.hasElementTranscludeDirective && a.replace || (tt = tf(b)), ii(ft, f(it), tt), gt(f(tt), ut)), it = y.transcludeOnThisElement ? ni(o, y.transclude, rt) : rt, y(w, o, tt, u, it))
                    }
                    v = null
                }), function (n, t, i, r, u) {
                    n = u;
                    t.$$destroyed || (v ? v.push(t, i, r, n) : (y.transcludeOnThisElement && (n = ni(t, y.transclude, u)), y(w, t, i, r, n)))
                }
            }

            function tr(n, t) {
                var i = t.priority - n.priority;
                return 0 !== i ? i : n.name !== t.name ? n.name < t.name ? -1 : 1 : n.index - t.index
            }

            function dt(n, t, i, r) {
                if (t)throw et("multidir", t.name, i.name, n, wt(r));
            }

            function ir(n, t) {
                var i = u(t, !0);
                i && n.push({
                    priority: 0, compile: function (n) {
                        n = n.parent();
                        var t = !!n.length;
                        return t && kt.$$addBindingClass(n), function (n, r) {
                            var u = r.parent();
                            t || kt.$$addBindingClass(u);
                            kt.$$addBindingInfo(u, i.expressions);
                            n.$watch(i, function (n) {
                                r[0].nodeValue = n
                            })
                        }
                    }
                })
            }

            function fi(n, i) {
                n = y(n || "html");
                switch (n) {
                    case"svg":
                    case"math":
                        var r = t.createElement("div");
                        return r.innerHTML = "<" + n + ">" + i + "<\/" + n + ">", r.childNodes[0].childNodes;
                    default:
                        return i
                }
            }

            function rr(n, t) {
                if ("srcdoc" == t)return ct.HTML;
                var i = pt(n);
                if ("xlinkHref" == t || "form" == i && "action" == t || "img" != i && ("src" == t || "ngSrc" == t))return ct.RESOURCE_URL
            }

            function ur(n, t, i, r, f) {
                var o = rr(n, r), e;
                if (f = g[r] || f, e = u(i, !0, o, f), e) {
                    if ("multiple" === r && "select" === pt(n))throw et("selmulti", wt(n));
                    t.push({
                        priority: 100, compile: function () {
                            return {
                                pre: function (n, t, s) {
                                    if (t = s.$$observers || (s.$$observers = {}), ut.test(r))throw et("nodomevents");
                                    var h = s[r];
                                    h !== i && (e = h && u(h, !0, o, f), i = h);
                                    e && (s[r] = e(n), (t[r] || (t[r] = [])).$$inter = !0, (s.$$observers && s.$$observers[r].$$scope || n).$watch(e, function (n, t) {
                                        "class" === r && n != t ? s.$updateClass(n, t) : s.$set(r, n)
                                    }))
                                }
                            }
                        }
                    })
                }
            }

            function ii(n, i, r) {
                var u = i[0], h = i.length, s = u.parentNode, e, o, c;
                if (n)for (e = 0, o = n.length; e < o; e++)if (n[e] == u) {
                    for (n[e++] = r, o = e + h - 1, c = n.length; e < c; e++, o++)o < c ? n[e] = n[o] : delete n[e];
                    n.length -= h - 1;
                    n.context === u && (n.context = r);
                    break
                }
                for (s && s.replaceChild(r, u), n = t.createDocumentFragment(), n.appendChild(u), f(r).data(f(u).data()), vt ? (vf = !0, vt.cleanData([u])) : delete f.cache[u[f.expando]], u = 1, h = i.length; u < h; u++)s = i[u], f(s).remove(), n.appendChild(s), delete i[u];
                i[0] = r;
                i.length = 1
            }

            function vi(n, t) {
                return l(function () {
                    return n.apply(null, arguments)
                }, n, t)
            }

            function yi(n, t, i, r, u, f) {
                try {
                    n(t, i, r, u, f)
                } catch (o) {
                    e(o, wt(i))
                }
            }

            var oi = function (n, t) {
                if (t)for (var u = Object.keys(t), r, i = 0, f = u.length; i < f; i++)r = u[i], this[r] = t[r]; else this.$attr = {};
                this.$$element = n
            };
            oi.prototype = {
                $normalize: bt, $addClass: function (n) {
                    n && 0 < n.length && lt.addClass(this.$$element, n)
                }, $removeClass: function (n) {
                    n && 0 < n.length && lt.removeClass(this.$$element, n)
                }, $updateClass: function (n, t) {
                    var i = ge(n, t);
                    i && i.length && lt.addClass(this.$$element, i);
                    (i = ge(t, n)) && i.length && lt.removeClass(this.$$element, i)
                }, $set: function (n, t, u, f) {
                    var h = this.$$element[0], s = ke(h, n), o = ic(h, n), h = n;
                    if (s ? (this.$$element.prop(n, t), f = s) : o && (this[o] = t, h = o), this[n] = t, f ? this.$attr[n] = f : (f = this.$attr[n]) || (this.$attr[n] = f = he(n, "-")), s = pt(this.$$element), "a" === s && "href" === n || "img" === s && "src" === n) this[n] = t = at(t, "src" === n); else if ("img" === s && "srcset" === n) {
                        for (var s = "", o = p(t), c = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/, c = /\s/.test(o) ? c : /(,)/, o = o.split(c), c = Math.floor(o.length / 2), l = 0; l < c; l++)var a = 2 * l, s = s + at(p(o[a]), !0), s = s + (" " + p(o[a + 1]));
                        o = p(o[2 * l]).split(/\s/);
                        s += at(p(o[0]), !0);
                        2 === o.length && (s += " " + p(o[1]));
                        this[n] = t = s
                    }
                    !1 !== u && (null === t || t === i ? this.$$element.removeAttr(f) : this.$$element.attr(f, t));
                    (n = this.$$observers) && r(n[h], function (n) {
                        try {
                            n(t)
                        } catch (i) {
                            e(i)
                        }
                    })
                }, $observe: function (n, t) {
                    var i = this, u = i.$$observers || (i.$$observers = rt()), r = u[n] || (u[n] = []);
                    return r.push(t), ot.$evalAsync(function () {
                        !r.$$inter && i.hasOwnProperty(n) && t(i[n])
                    }), function () {
                        di(r, t)
                    }
                }
            };
            var pi = u.startSymbol(), wi = u.endSymbol(), ki = "{{" == pi || "}}" == wi ? ht : function (n) {
                    return n.replace(/\{\{/g, pi).replace(/}}/g, wi)
                }, fr = /^ngAttr[A-Z]/;
            return kt.$$addBindingInfo = v ? function (n, t) {
                    var i = n.data("$binding") || [];
                    s(t) ? i = i.concat(t) : i.push(t);
                    n.data("$binding", i)
                } : h, kt.$$addBindingClass = v ? function (n) {
                    gt(n, "ng-binding")
                } : h, kt.$$addScopeInfo = v ? function (n, t, i, r) {
                    n.data(i ? r ? "$isolateScopeNoTemplate" : "$isolateScope" : "$scope", t)
                } : h, kt.$$addScopeClass = v ? function (n, t) {
                    gt(n, t ? "ng-isolate-scope" : "ng-scope")
                } : h, kt
        }]
    }

    function bt(n) {
        return tr(n.replace(ls, ""))
    }

    function ge(n, t) {
        var r = "", e = n.split(/\s+/), o = t.split(/\s+/), u = 0, f, i;
        n:for (; u < e.length; u++) {
            for (f = e[u], i = 0; i < o.length; i++)if (f == o[i])continue n;
            r += (0 < r.length ? " " : "") + f
        }
        return r
    }

    function no(n) {
        n = f(n);
        var t = n.length;
        if (1 >= t)return n;
        for (; t--;)8 === n[t].nodeType && ra.call(n, t, 1);
        return n
    }

    function ac() {
        var n = {}, t = !1, r = /^(\S+)(\s+as\s+(\w+))?$/;
        this.register = function (t, i) {
            si(t, "controller");
            c(t) ? l(n, t) : n[t] = i
        };
        this.allowGlobals = function () {
            t = !0
        };
        this.$get = ["$injector", "$window", function (u, f) {
            function e(n, t, i, r) {
                if (!n || !c(n.$scope))throw v("$controller")("noscp", r, t);
                n.$scope[t] = i
            }

            return function (o, h, c, v) {
                var p, y, w;
                if (c = !0 === c, v && a(v) && (w = v), a(o)) {
                    if (v = o.match(r), !v)throw ka("ctrlfmt", o);
                    y = v[1];
                    w = w || v[3];
                    o = n.hasOwnProperty(y) ? n[y] : ce(h.$scope, y, !0) || (t ? ce(f, y, !0) : i);
                    dr(o, y, !0)
                }
                return c ? (c = (s(o) ? o[o.length - 1] : o).prototype, p = Object.create(c || null), w && e(h, w, p, y || o.name), l(function () {
                        return u.invoke(o, p, h, y), p
                    }, {instance: p, identifier: w})) : (p = u.instantiate(o, h, y), w && e(h, w, p, y || o.name), p)
            }
        }]
    }

    function vc() {
        this.$get = ["$window", function (n) {
            return f(n.document)
        }]
    }

    function yc() {
        this.$get = ["$log", function (n) {
            return function () {
                n.error.apply(n, arguments)
            }
        }]
    }

    function uf(n, t) {
        var r, i;
        return a(n) && (r = n.replace(nv, "").trim(), r && (i = t("Content-Type"), (i = i && 0 === i.indexOf(as)) || (i = (i = r.match(da)) && ga[i[0]].test(r)), i && (n = fe(r)))), n
    }

    function to(n) {
        var t = rt(), i, u, f;
        return n ? (r(n.split("\n"), function (n) {
                f = n.indexOf(":");
                i = y(p(n.substr(0, f)));
                u = p(n.substr(f + 1));
                i && (t[i] = t[i] ? t[i] + ", " + u : u)
            }), t) : t
    }

    function io(n) {
        var t = c(n) ? n : i;
        return function (i) {
            return t || (t = to(n)), i ? (i = t[y(i)], void 0 === i && (i = null), i) : t
        }
    }

    function ro(n, t, i, u) {
        return o(u) ? u(n, t, i) : (r(u, function (r) {
                n = r(n, t, i)
            }), n)
    }

    function pc() {
        var n = this.defaults = {
            transformResponse: [uf],
            transformRequest: [function (n) {
                return c(n) && "[object File]" !== fi.call(n) && "[object Blob]" !== fi.call(n) && "[object FormData]" !== fi.call(n) ? nr(n) : n
            }],
            headers: {common: {Accept: "application/json, text/plain, */*"}, post: lt(kf), put: lt(kf), patch: lt(kf)},
            xsrfCookieName: "XSRF-TOKEN",
            xsrfHeaderName: "X-XSRF-TOKEN"
        }, t = !1, f;
        this.useApplyAsync = function (n) {
            return u(n) ? (t = !!n, this) : t
        };
        f = this.interceptors = [];
        this.$get = ["$httpBackend", "$browser", "$cacheFactory", "$rootScope", "$q", "$injector", function (h, p, w, b, k, d) {
            function g(t) {
                function h(n) {
                    var t = l({}, n);
                    return t.data = n.data ? ro(n.data, n.headers, n.status, f.transformResponse) : n.data, n = n.status, 200 <= n && 300 > n ? t : k.reject(t)
                }

                function a(n) {
                    var t, i = {};
                    return r(n, function (n, r) {
                        o(n) ? (t = n(), null != t && (i[r] = t)) : i[r] = n
                    }), i
                }

                var f, s, c, u;
                if (!nt.isObject(t))throw v("$http")("badreq", t);
                for (f = l({
                    method: "get",
                    transformRequest: n.transformRequest,
                    transformResponse: n.transformResponse
                }, t), f.headers = function (t) {
                    var i = n.headers, u = l({}, t.headers), r, f, i = l({}, i.common, i[y(t.method)]);
                    n:for (r in i) {
                        t = y(r);
                        for (f in u)if (y(f) === t)continue n;
                        u[r] = i[r]
                    }
                    return a(u)
                }(t), f.method = au(f.method), s = [function (t) {
                    var u = t.headers, f = ro(t.data, io(u), i, t.transformRequest);
                    return e(f) && r(u, function (n, t) {
                        "content-type" === y(t) && delete u[t]
                    }), e(t.withCredentials) && !e(n.withCredentials) && (t.withCredentials = n.withCredentials), it(t, f).then(h, h)
                }, i], u = k.when(f), r(tt, function (n) {
                    (n.request || n.requestError) && s.unshift(n.request, n.requestError);
                    (n.response || n.responseError) && s.push(n.response, n.responseError)
                }); s.length;)t = s.shift(), c = s.shift(), u = u.then(t, c);
                return u.success = function (n) {
                    return u.then(function (t) {
                        n(t.data, t.status, t.headers, f)
                    }), u
                }, u.error = function (n) {
                    return u.then(null, function (t) {
                        n(t.data, t.status, t.headers, f)
                    }), u
                }, u
            }

            function it(r, f) {
                function ft(n, i, r, u) {
                    function f() {
                        y(i, n, r, u)
                    }

                    a && (200 <= n && 300 > n ? a.put(v, [n, i, to(r), u]) : a.remove(v));
                    t ? b.$applyAsync(f) : (f(), b.$$phase || b.$apply())
                }

                function y(n, t, i, u) {
                    t = Math.max(t, 0);
                    (200 <= t && 300 > t ? w.resolve : w.reject)({
                        data: n,
                        status: t,
                        headers: io(i),
                        config: r,
                        statusText: u
                    })
                }

                function nt(n) {
                    y(n.data, n.status, lt(n.headers()), n.statusText)
                }

                function tt() {
                    var n = g.pendingRequests.indexOf(r);
                    -1 !== n && g.pendingRequests.splice(n, 1)
                }

                var w = k.defer(), d = w.promise, a, l, it = r.headers, v = rt(r.url, r.params);
                return g.pendingRequests.push(r), d.then(tt, tt), (r.cache || n.cache) && !1 !== r.cache && ("GET" === r.method || "JSONP" === r.method) && (a = c(r.cache) ? r.cache : c(n.cache) ? n.cache : ut), a && (l = a.get(v), u(l) ? l && o(l.then) ? l.then(nt, nt) : s(l) ? y(l[1], l[0], lt(l[2]), l[3]) : y(l, 200, {}, "OK") : a.put(v, d)), e(l) && ((l = lo(r.url) ? p.cookies()[r.xsrfCookieName || n.xsrfCookieName] : i) && (it[r.xsrfHeaderName || n.xsrfHeaderName] = l), h(r.method, v, f, ft, it, r.timeout, r.withCredentials, r.responseType)), d
            }

            function rt(n, t) {
                if (!t)return n;
                var i = [];
                return lh(t, function (n, t) {
                    null === n || e(n) || (s(n) || (n = [n]), r(n, function (n) {
                        c(n) && (n = ct(n) ? n.toISOString() : nr(n));
                        i.push(ti(t) + "=" + ti(n))
                    }))
                }), 0 < i.length && (n += (-1 == n.indexOf("?") ? "?" : "&") + i.join("&")), n
            }

            var ut = w("$http"), tt = [];
            return r(f, function (n) {
                tt.unshift(a(n) ? d.get(n) : d.invoke(n))
            }), g.pendingRequests = [], function () {
                r(arguments, function (n) {
                    g[n] = function (t, i) {
                        return g(l(i || {}, {method: n, url: t}))
                    }
                })
            }("get", "delete", "head", "jsonp"), function () {
                r(arguments, function (n) {
                    g[n] = function (t, i, r) {
                        return g(l(r || {}, {method: n, url: t, data: i}))
                    }
                })
            }("post", "put", "patch"), g.defaults = n, g
        }]
    }

    function wc() {
        return new n.XMLHttpRequest
    }

    function bc() {
        this.$get = ["$browser", "$window", "$document", function (n, t, i) {
            return kc(n, wc, n.defer, t.angular.callbacks, i[0])
        }]
    }

    function kc(n, t, f, e, s) {
        function c(n, t, i) {
            var r = s.createElement("script"), u = null;
            return r.type = "text/javascript", r.src = n, r.async = !0, u = function (n) {
                r.removeEventListener("load", u, !1);
                r.removeEventListener("error", u, !1);
                s.body.removeChild(r);
                r = null;
                var f = -1, o = "unknown";
                n && ("load" !== n.type || e[t].called || (n = {type: "error"}), o = n.type, f = "error" === n.type ? 404 : 200);
                i && i(f, o)
            }, r.addEventListener("load", u, !1), r.addEventListener("error", u, !1), s.body.appendChild(r), u
        }

        return function (s, l, a, v, p, w, b, k) {
            function rt() {
                nt && nt();
                d && d.abort()
            }

            function tt(t, r, u, e, o) {
                it !== i && f.cancel(it);
                nt = d = null;
                t(r, u, e, o);
                n.$$completeOutstandingRequest(h)
            }

            var g, nt, d, it;
            if (n.$$incOutstandingRequestCount(), l = l || n.url(), "jsonp" == y(s)) g = "_" + (e.counter++).toString(36), e[g] = function (n) {
                e[g].data = n;
                e[g].called = !0
            }, nt = c(l.replace("JSON_CALLBACK", "angular.callbacks." + g), g, function (n, t) {
                tt(v, n, e[g].data, "", t);
                e[g] = h
            }); else {
                if (d = t(), d.open(s, l, !0), r(p, function (n, t) {
                        u(n) && d.setRequestHeader(t, n)
                    }), d.onload = function () {
                        var i = d.statusText || "", t = "response" in d ? d.response : d.responseText, n = 1223 === d.status ? 204 : d.status;
                        0 === n && (n = t ? 200 : "file" == dt(l).protocol ? 404 : 0);
                        tt(v, n, t, d.getAllResponseHeaders(), i)
                    }, s = function () {
                        tt(v, -1, null, null, "")
                    }, d.onerror = s, d.onabort = s, b && (d.withCredentials = !0), k)try {
                    d.responseType = k
                } catch (ut) {
                    if ("json" !== k)throw ut;
                }
                d.send(a || null)
            }
            0 < w ? it = f(rt, w) : w && o(w.then) && w.then(rt)
        }
    }

    function dc() {
        var n = "{{", t = "}}";
        this.startSymbol = function (t) {
            return t ? (n = t, this) : n
        };
        this.endSymbol = function (n) {
            return n ? (t = n, this) : t
        };
        this.$get = ["$parse", "$exceptionHandler", "$sce", function (i, r, f) {
            function h(n) {
                return "\\\\\\" + n
            }

            function s(s, h, p, w) {
                function rt(i) {
                    return i.replace(v, n).replace(y, t)
                }

                function et(n) {
                    var i, t;
                    try {
                        if (i = n, n = p ? f.getTrusted(p, i) : f.valueOf(i), w && !u(n)) t = n; else if (null == n) t = ""; else {
                            switch (typeof n) {
                                case"string":
                                    break;
                                case"number":
                                    n = "" + n;
                                    break;
                                default:
                                    n = nr(n)
                            }
                            t = n
                        }
                        return t
                    } catch (e) {
                        t = df("interr", s, e.toString());
                        r(t)
                    }
                }

                var it;
                w = !!w;
                for (var d, nt, b = 0, g = [], tt = [], ut = s.length, k = [], ft = []; b < ut;)if (-1 != (d = s.indexOf(n, b)) && -1 != (nt = s.indexOf(t, d + c))) b !== d && k.push(rt(s.substring(b, d))), b = s.substring(d + c, nt), g.push(b), tt.push(i(b, et)), b = nt + a, ft.push(k.length), k.push(""); else {
                    b !== ut && k.push(rt(s.substring(b)));
                    break
                }
                if (p && 1 < k.length)throw df("noconcat", s);
                if (!h || g.length)return it = function (n) {
                    for (var t = 0, i = g.length; t < i; t++) {
                        if (w && e(n[t]))return;
                        k[ft[t]] = n[t]
                    }
                    return k.join("")
                }, l(function (n) {
                    var t = 0, i = g.length, u = Array(i);
                    try {
                        for (; t < i; t++)u[t] = tt[t](n);
                        return it(u)
                    } catch (f) {
                        n = df("interr", s, f.toString());
                        r(n)
                    }
                }, {
                    exp: s, expressions: g, $$watchDelegate: function (n, t, i) {
                        var r;
                        return n.$watchGroup(tt, function (i, u) {
                            var f = it(i);
                            o(t) && t.call(this, f, i !== u ? r : f, n);
                            r = f
                        }, i)
                    }
                })
            }

            var c = n.length, a = t.length, v = new RegExp(n.replace(/./g, h), "g"), y = new RegExp(t.replace(/./g, h), "g");
            return s.startSymbol = function () {
                return n
            }, s.endSymbol = function () {
                return t
            }, s
        }]
    }

    function gc() {
        this.$get = ["$rootScope", "$window", "$q", "$$q", function (n, t, i, r) {
            function e(e, o, s, h) {
                var y = t.setInterval, p = t.clearInterval, a = 0, v = u(h) && !h, l = (v ? r : i).defer(), c = l.promise;
                return s = u(s) ? s : 0, c.then(null, null, e), c.$$intervalId = y(function () {
                    l.notify(a++);
                    0 < s && a >= s && (l.resolve(a), p(c.$$intervalId), delete f[c.$$intervalId]);
                    v || n.$apply()
                }, o), f[c.$$intervalId] = l, c
            }

            var f = {};
            return e.cancel = function (n) {
                return n && n.$$intervalId in f ? (f[n.$$intervalId].reject("canceled"), t.clearInterval(n.$$intervalId), delete f[n.$$intervalId], !0) : !1
            }, e
        }]
    }

    function nl() {
        this.$get = function () {
            return {
                id: "en-us",
                NUMBER_FORMATS: {
                    DECIMAL_SEP: ".",
                    GROUP_SEP: ",",
                    PATTERNS: [{
                        minInt: 1,
                        minFrac: 0,
                        maxFrac: 3,
                        posPre: "",
                        posSuf: "",
                        negPre: "-",
                        negSuf: "",
                        gSize: 3,
                        lgSize: 3
                    }, {
                        minInt: 1,
                        minFrac: 2,
                        maxFrac: 2,
                        posPre: "¤",
                        posSuf: "",
                        negPre: "(¤",
                        negSuf: ")",
                        gSize: 3,
                        lgSize: 3
                    }],
                    CURRENCY_SYM: "$"
                },
                DATETIME_FORMATS: {
                    MONTH: "January February March April May June July August September October November December".split(" "),
                    SHORTMONTH: "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),
                    DAY: "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),
                    SHORTDAY: "Sun Mon Tue Wed Thu Fri Sat".split(" "),
                    AMPMS: ["AM", "PM"],
                    medium: "MMM d, y h:mm:ss a",
                    short: "M/d/yy h:mm a",
                    fullDate: "EEEE, MMMM d, y",
                    longDate: "MMMM d, y",
                    mediumDate: "MMM d, y",
                    shortDate: "M/d/yy",
                    mediumTime: "h:mm:ss a",
                    shortTime: "h:mm a"
                },
                pluralCat: function (n) {
                    return 1 === n ? "one" : "other"
                }
            }
        }
    }

    function ff(n) {
        n = n.split("/");
        for (var t = n.length; t--;)n[t] = kr(n[t]);
        return n.join("/")
    }

    function uo(n, t) {
        var i = dt(n);
        t.$$protocol = i.protocol;
        t.$$host = i.hostname;
        t.$$port = g(i.port) || iv[i.protocol] || null
    }

    function fo(n, t) {
        var r = "/" !== n.charAt(0), i;
        r && (n = "/" + n);
        i = dt(n);
        t.$$path = decodeURIComponent(r && "/" === i.pathname.charAt(0) ? i.pathname.substring(1) : i.pathname);
        t.$$search = oe(i.search);
        t.$$hash = decodeURIComponent(i.hash);
        t.$$path && "/" != t.$$path.charAt(0) && (t.$$path = "/" + t.$$path)
    }

    function kt(n, t) {
        if (0 === t.indexOf(n))return t.substr(n.length)
    }

    function ii(n) {
        var t = n.indexOf("#");
        return -1 == t ? n : n.substr(0, t)
    }

    function ou(n) {
        return n.replace(/(#.+)|#$/, "$1")
    }

    function ef(n) {
        return n.substr(0, ii(n).lastIndexOf("/") + 1)
    }

    function of(n, t) {
        this.$$html5 = !0;
        t = t || "";
        var r = ef(n);
        uo(n, this);
        this.$$parse = function (n) {
            var t = kt(r, n);
            if (!a(t))throw wu("ipthprfx", n, r);
            fo(t, this);
            this.$$path || (this.$$path = "/");
            this.$$compose()
        };
        this.$$compose = function () {
            var n = gu(this.$$search), t = this.$$hash ? "#" + kr(this.$$hash) : "";
            this.$$url = ff(this.$$path) + (n ? "?" + n : "") + t;
            this.$$absUrl = r + this.$$url.substr(1)
        };
        this.$$parseLinkUrl = function (u, f) {
            if (f && "#" === f[0])return this.hash(f.slice(1)), !0;
            var e, o;
            return (e = kt(n, u)) !== i ? (o = e, o = (e = kt(t, e)) !== i ? r + (kt("/", e) || e) : n + o) : (e = kt(r, u)) !== i ? o = r + e : r == u + "/" && (o = r), o && this.$$parse(o), !!o
        }
    }

    function sf(n, t) {
        var i = ef(n);
        uo(n, this);
        this.$$parse = function (r) {
            var u, f;
            r = kt(n, r) || kt(i, r);
            "#" === r.charAt(0) ? (u = kt(t, r), e(u) && (u = r)) : u = this.$$html5 ? r : "";
            fo(u, this);
            r = this.$$path;
            f = /^\/[A-Z]:(\/.*)/;
            0 === u.indexOf(n) && (u = u.replace(n, ""));
            f.exec(u) || (r = (u = f.exec(r)) ? u[1] : r);
            this.$$path = r;
            this.$$compose()
        };
        this.$$compose = function () {
            var i = gu(this.$$search), r = this.$$hash ? "#" + kr(this.$$hash) : "";
            this.$$url = ff(this.$$path) + (i ? "?" + i : "") + r;
            this.$$absUrl = n + (this.$$url ? t + this.$$url : "")
        };
        this.$$parseLinkUrl = function (t) {
            return ii(n) == ii(t) ? (this.$$parse(t), !0) : !1
        }
    }

    function eo(n, t) {
        this.$$html5 = !0;
        sf.apply(this, arguments);
        var i = ef(n);
        this.$$parseLinkUrl = function (r, u) {
            if (u && "#" === u[0])return this.hash(u.slice(1)), !0;
            var f, e;
            return n == ii(r) ? f = r : (e = kt(i, r)) ? f = n + t + e : i === r + "/" && (f = i), f && this.$$parse(f), !!f
        };
        this.$$compose = function () {
            var i = gu(this.$$search), r = this.$$hash ? "#" + kr(this.$$hash) : "";
            this.$$url = ff(this.$$path) + (i ? "?" + i : "") + r;
            this.$$absUrl = n + t + this.$$url
        }
    }

    function su(n) {
        return function () {
            return this[n]
        }
    }

    function oo(n, t) {
        return function (i) {
            return e(i) ? this[n] : (this[n] = t(i), this.$$compose(), this)
        }
    }

    function tl() {
        var t = "", n = {enabled: !1, requireBase: !0, rewriteLinks: !0};
        this.hashPrefix = function (n) {
            return u(n) ? (t = n, this) : t
        };
        this.html5Mode = function (t) {
            return ki(t) ? (n.enabled = t, this) : c(t) ? (ki(t.enabled) && (n.enabled = t.enabled), ki(t.requireBase) && (n.requireBase = t.requireBase), ki(t.rewriteLinks) && (n.rewriteLinks = t.rewriteLinks), this) : n
        };
        this.$get = ["$rootScope", "$browser", "$sniffer", "$rootElement", "$window", function (i, r, u, e, o) {
            function y(n, t, i) {
                var u = s.url(), f = s.$$state;
                try {
                    r.url(n, t, i);
                    s.$$state = r.state()
                } catch (e) {
                    throw s.url(u), s.$$state = f, e;
                }
            }

            function p(n, t) {
                i.$broadcast("$locationChangeSuccess", s.absUrl(), n, s.$$state, t)
            }

            var s, l, h, v, w, a;
            if (l = r.baseHref(), h = r.url(), n.enabled) {
                if (!l && n.requireBase)throw wu("nobase");
                v = h.substring(0, h.indexOf("/", h.indexOf("//") + 2)) + (l || "/");
                l = u.history ? of : eo
            } else v = ii(h), l = sf;
            s = new l(v, "#" + t);
            s.$$parseLinkUrl(h, h);
            s.$$state = r.state();
            w = /^\s*(javascript|mailto):/i;
            e.on("click", function (t) {
                var u, h, l;
                if (n.rewriteLinks && !t.ctrlKey && !t.metaKey && !t.shiftKey && 2 != t.which && 2 != t.button) {
                    for (u = f(t.target); "a" !== pt(u[0]);)if (u[0] === e[0] || !(u = u.parent())[0])return;
                    h = u.prop("href");
                    l = u.attr("href") || u.attr("xlink:href");
                    c(h) && "[object SVGAnimatedString]" === h.toString() && (h = dt(h.animVal).href);
                    w.test(h) || !h || u.attr("target") || t.isDefaultPrevented() || !s.$$parseLinkUrl(h, l) || (t.preventDefault(), s.absUrl() != r.url() && (i.$apply(), o.angular["ff-684208-preventDefault"] = !0))
                }
            });
            ou(s.absUrl()) != ou(h) && r.url(s.absUrl(), !0);
            a = !0;
            r.onUrlChange(function (n, t) {
                i.$evalAsync(function () {
                    var r = s.absUrl(), u = s.$$state, f;
                    s.$$parse(n);
                    s.$$state = t;
                    f = i.$broadcast("$locationChangeStart", n, r, t, u).defaultPrevented;
                    s.absUrl() === n && (f ? (s.$$parse(r), s.$$state = u, y(r, !1, u)) : (a = !1, p(r, u)))
                });
                i.$$phase || i.$digest()
            });
            return i.$watch(function () {
                var t = ou(r.url()), e = ou(s.absUrl()), n = r.state(), o = s.$$replace, f = t !== e || s.$$html5 && u.history && n !== s.$$state;
                (a || f) && (a = !1, i.$evalAsync(function () {
                    var r = s.absUrl(), u = i.$broadcast("$locationChangeStart", r, t, s.$$state, n).defaultPrevented;
                    s.absUrl() === r && (u ? (s.$$parse(t), s.$$state = n) : (f && y(r, o, n === s.$$state ? null : s.$$state), p(t, n)))
                }));
                s.$$replace = !1
            }), s
        }]
    }

    function il() {
        var n = !0, t = this;
        this.debugEnabled = function (t) {
            return u(t) ? (n = t, this) : n
        };
        this.$get = ["$window", function (i) {
            function f(n) {
                return n instanceof Error && (n.stack ? n = n.message && -1 === n.stack.indexOf(n.message) ? "Error: " + n.message + "\n" + n.stack : n.stack : n.sourceURL && (n = n.message + "\n" + n.sourceURL + ":" + n.line)), n
            }

            function u(n) {
                var t = i.console || {}, u = t[n] || t.log || h;
                n = !1;
                try {
                    n = !!u.apply
                } catch (e) {
                }
                return n ? function () {
                        var n = [];
                        return r(arguments, function (t) {
                            n.push(f(t))
                        }), u.apply(t, n)
                    } : function (n, t) {
                        u(n, null == t ? "" : t)
                    }
            }

            return {
                log: u("log"), info: u("info"), warn: u("warn"), error: u("error"), debug: function () {
                    var i = u("debug");
                    return function () {
                        n && i.apply(t, arguments)
                    }
                }()
            }
        }]
    }

    function at(n, t) {
        if ("__defineGetter__" === n || "__defineSetter__" === n || "__lookupGetter__" === n || "__lookupSetter__" === n || "__proto__" === n)throw ot("isecfld", t);
        return n
    }

    function ut(n, t) {
        if (n) {
            if (n.constructor === n)throw ot("isecfn", t);
            if (n.window === n)throw ot("isecwindow", t);
            if (n.children && (n.nodeName || n.prop && n.attr && n.find))throw ot("isecdom", t);
            if (n === Object)throw ot("isecobj", t);
        }
        return n
    }

    function hf(n) {
        return n.constant
    }

    function ur(n, t, i, r, u) {
        var f, o, e;
        for (ut(n, u), ut(t, u), i = i.split("."), o = 0; 1 < i.length; o++)f = at(i.shift(), u), e = 0 === o && t && t[f] || n[f], e || (e = {}, n[f] = e), n = ut(e, u);
        return f = at(i.shift(), u), ut(n[f], u), n[f] = r
    }

    function ci(n) {
        return "constructor" == n
    }

    function so(n, t, r, u, f, e, o) {
        at(n, e);
        at(t, e);
        at(r, e);
        at(u, e);
        at(f, e);
        var s = function (n) {
            return ut(n, e)
        }, h = o || ci(n) ? s : ht, c = o || ci(t) ? s : ht, l = o || ci(r) ? s : ht, a = o || ci(u) ? s : ht, v = o || ci(f) ? s : ht;
        return function (e, o) {
            var s = o && o.hasOwnProperty(n) ? o : e;
            return null == s ? s : (s = h(s[n]), !t) ? s : null == s ? i : (s = c(s[t]), !r) ? s : null == s ? i : (s = l(s[r]), !u) ? s : null == s ? i : (s = a(s[u]), f ? null == s ? i : s = v(s[f]) : s)
        }
    }

    function rl(n, t) {
        return function (i, r) {
            return n(i, r, ut, t)
        }
    }

    function ul(n, t, u) {
        var o = t.expensiveChecks, l = o ? hv : sv, e = l[n], f, h, s, c;
        return e ? e : (f = n.split("."), h = f.length, t.csp ? e = 6 > h ? so(f[0], f[1], f[2], f[3], f[4], u, o) : function (n, t) {
                        var r = 0, e;
                        do e = so(f[r++], f[r++], f[r++], f[r++], f[r++], u, o)(n, t), t = i, n = e; while (r < h);
                        return e
                    } : (s = "", o && (s += "s = eso(s, fe);\nl = eso(l, fe);\n"), c = o, r(f, function (n, t) {
                    at(n, u);
                    var i = (t ? "s" : '((l&&l.hasOwnProperty("' + n + '"))?l:s)') + "." + n;
                    (o || ci(n)) && (i = "eso(" + i + ", fe)", c = !0);
                    s += "if(s == null) return undefined;\ns=" + i + ";\n"
                }), s += "return s;", t = new Function("s", "l", "eso", "fe", s), t.toString = tt(s), c && (t = rl(t, u)), e = t), e.sharedGetter = !0, e.assign = function (t, i, r) {
                return ur(t, r, n, i, n)
            }, l[n] = e)
    }

    function cf(n) {
        return o(n.valueOf) ? n.valueOf() : cv.call(n)
    }

    function fl() {
        var n = rt(), t = rt();
        this.$get = ["$filter", "$sniffer", function (i, f) {
            function y(n) {
                var t = n;
                return n.sharedGetter && (t = function (t, i) {
                    return n(t, i)
                }, t.literal = n.literal, t.constant = n.constant, t.assign = n.assign), t
            }

            function l(n, t) {
                for (var i, r = 0, u = n.length; r < u; r++)i = n[r], i.constant || (i.inputs ? l(i.inputs, t) : -1 === t.indexOf(i) && t.push(i));
                return t
            }

            function e(n, t) {
                return null == n || null == t ? n === t : "object" == typeof n && (n = cf(n), "object" == typeof n) ? !1 : n === t || n !== n && t !== t
            }

            function s(n, t, i, r) {
                var u = r.$$inputs || (r.$$inputs = l(r.inputs, [])), f, o;
                if (1 === u.length)return o = e, u = u[0], n.$watch(function (n) {
                    var t = u(n);
                    return e(t, o) || (f = r(n), o = t && cf(t)), f
                }, t, i);
                for (var s = [], h = 0, c = u.length; h < c; h++)s[h] = e;
                return n.$watch(function (n) {
                    for (var i, o = !1, t = 0, h = u.length; t < h; t++)i = u[t](n), (o || (o = !e(i, s[t]))) && (s[t] = i && cf(i));
                    return o && (f = r(n)), f
                }, t, i)
            }

            function a(n, t, i, r) {
                var f, e;
                return f = n.$watch(function (n) {
                    return r(n)
                }, function (n, i, r) {
                    e = n;
                    o(t) && t.apply(this, arguments);
                    u(n) && r.$$postDigest(function () {
                        u(e) && f()
                    })
                }, i)
            }

            function v(n, t, i, f) {
                function e(n) {
                    var t = !0;
                    return r(n, function (n) {
                        u(n) || (t = !1)
                    }), t
                }

                var s, h;
                return s = n.$watch(function (n) {
                    return f(n)
                }, function (n, i, r) {
                    h = n;
                    o(t) && t.call(this, n, i, r);
                    e(n) && r.$$postDigest(function () {
                        e(h) && s()
                    })
                }, i)
            }

            function p(n, t, i, r) {
                var u;
                return u = n.$watch(function (n) {
                    return r(n)
                }, function () {
                    o(t) && t.apply(this, arguments);
                    u()
                }, i)
            }

            function c(n, t) {
                if (!t)return n;
                var i = n.$$watchDelegate, i = i !== v && i !== a ? function (i, r) {
                        var u = n(i, r);
                        return t(u, i, r)
                    } : function (i, r) {
                        var f = n(i, r), e = t(f, i, r);
                        return u(f) ? e : f
                    };
                return n.$$watchDelegate && n.$$watchDelegate !== s ? i.$$watchDelegate = n.$$watchDelegate : t.$stateful || (i.$$watchDelegate = s, i.inputs = [n]), i
            }

            var w = {csp: f.csp, expensiveChecks: !1}, b = {csp: f.csp, expensiveChecks: !0};
            return function (r, u, f) {
                var e, k, o, l;
                switch (typeof r) {
                    case"string":
                        return o = r = r.trim(), l = f ? t : n, e = l[o], e || (":" === r.charAt(0) && ":" === r.charAt(1) && (k = !0, r = r.substring(2)), f = f ? b : w, e = new gf(f), e = new vi(e, i, f).parse(r), e.constant ? e.$$watchDelegate = p : k ? (e = y(e), e.$$watchDelegate = e.literal ? v : a) : e.inputs && (e.$$watchDelegate = s), l[o] = e), c(e, u);
                    case"function":
                        return c(r, u);
                    default:
                        return c(h, u)
                }
            }
        }]
    }

    function el() {
        this.$get = ["$rootScope", "$exceptionHandler", function (n, t) {
            return ho(function (t) {
                n.$evalAsync(t)
            }, t)
        }]
    }

    function ol() {
        this.$get = ["$browser", "$exceptionHandler", function (n, t) {
            return ho(function (t) {
                n.defer(t)
            }, t)
        }]
    }

    function ho(n, t) {
        function k(n, t, i) {
            function r(t) {
                return function (i) {
                    u || (u = !0, t.call(n, i))
                }
            }

            var u = !1;
            return [r(t), r(i)]
        }

        function a() {
            this.$$state = {status: 0}
        }

        function h(n, t) {
            return function (i) {
                t.call(n, i)
            }
        }

        function l(r) {
            !r.processScheduled && r.pending && (r.processScheduled = !0, n(function () {
                var e, n, f, u, s;
                for (f = r.pending, r.processScheduled = !1, r.pending = i, u = 0, s = f.length; u < s; ++u) {
                    n = f[u][0];
                    e = f[u][r.status];
                    try {
                        o(e) ? n.resolve(e(r.value)) : 1 === r.status ? n.resolve(r.value) : n.reject(r.value)
                    } catch (h) {
                        n.reject(h);
                        t(h)
                    }
                }
            }))
        }

        function u() {
            this.promise = new a;
            this.resolve = h(this, this.resolve);
            this.reject = h(this, this.reject);
            this.notify = h(this, this.notify)
        }

        var y = v("$q", TypeError);
        a.prototype = {
            then: function (n, t, i) {
                var r = new u;
                return this.$$state.pending = this.$$state.pending || [], this.$$state.pending.push([r, n, t, i]), 0 < this.$$state.status && l(this.$$state), r.promise
            }, "catch": function (n) {
                return this.then(null, n)
            }, "finally": function (n, t) {
                return this.then(function (t) {
                    return p(t, !0, n)
                }, function (t) {
                    return p(t, !1, n)
                }, t)
            }
        };
        u.prototype = {
            resolve: function (n) {
                this.promise.$$state.status || (n === this.promise ? this.$$reject(y("qcycle", n)) : this.$$resolve(n))
            }, $$resolve: function (n) {
                var i, r = k(this, this.$$resolve, this.$$reject);
                try {
                    (c(n) || o(n)) && (i = n && n.then);
                    o(i) ? (this.promise.$$state.status = -1, i.call(n, r[0], r[1], this.notify)) : (this.promise.$$state.value = n, this.promise.$$state.status = 1, l(this.promise.$$state))
                } catch (u) {
                    r[1](u);
                    t(u)
                }
            }, reject: function (n) {
                this.promise.$$state.status || this.$$reject(n)
            }, $$reject: function (n) {
                this.promise.$$state.value = n;
                this.promise.$$state.status = 2;
                l(this.promise.$$state)
            }, notify: function (i) {
                var r = this.promise.$$state.pending;
                0 >= this.promise.$$state.status && r && r.length && n(function () {
                    for (var u, f, n = 0, e = r.length; n < e; n++) {
                        f = r[n][0];
                        u = r[n][3];
                        try {
                            f.notify(o(u) ? u(i) : i)
                        } catch (s) {
                            t(s)
                        }
                    }
                })
            }
        };
        var e = function (n, t) {
            var i = new u;
            return t ? i.resolve(n) : i.reject(n), i.promise
        }, p = function (n, t, i) {
            var r = null;
            try {
                o(i) && (r = i())
            } catch (u) {
                return e(u, !1)
            }
            return r && o(r.then) ? r.then(function () {
                    return e(n, t)
                }, function (n) {
                    return e(n, !1)
                }) : e(n, t)
        }, w = function (n, t, i, r) {
            var f = new u;
            return f.resolve(n), f.promise.then(t, i, r)
        }, f = function b(n) {
            if (!o(n))throw y("norslvr", n);
            if (!(this instanceof b))return new b(n);
            var t = new u;
            return n(function (n) {
                t.resolve(n)
            }, function (n) {
                t.reject(n)
            }), t.promise
        };
        return f.defer = function () {
            return new u
        }, f.reject = function (n) {
            var t = new u;
            return t.reject(n), t.promise
        }, f.when = w, f.all = function (n) {
            var i = new u, f = 0, t = s(n) ? [] : {};
            return r(n, function (n, r) {
                f++;
                w(n).then(function (n) {
                    t.hasOwnProperty(r) || (t[r] = n, --f || i.resolve(t))
                }, function (n) {
                    t.hasOwnProperty(r) || i.reject(n)
                })
            }), 0 === f && i.resolve(t), i.promise
        }, f
    }

    function sl() {
        this.$get = ["$window", "$timeout", function (n, t) {
            var i = n.requestAnimationFrame || n.webkitRequestAnimationFrame, f = n.cancelAnimationFrame || n.webkitCancelAnimationFrame || n.webkitCancelRequestAnimationFrame, r = !!i, u = r ? function (n) {
                    var t = i(n);
                    return function () {
                        f(t)
                    }
                } : function (n) {
                    var i = t(n, 16.66, !1);
                    return function () {
                        t.cancel(i)
                    }
                };
            return u.supported = r, u
        }]
    }

    function hl() {
        var i = 10, u = v("$rootScope"), n = null, t = null;
        this.digestTtl = function (n) {
            return arguments.length && (i = n), i
        };
        this.$get = ["$injector", "$exceptionHandler", "$parse", "$browser", function (f, s, l, a) {
            function p() {
                this.$id = ++vu;
                this.$$phase = this.$parent = this.$$watchers = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null;
                this.$root = this;
                this.$$destroyed = !1;
                this.$$listeners = {};
                this.$$listenerCount = {};
                this.$$isolateBindings = null
            }

            function k(n) {
                if (v.$$phase)throw u("inprog", v.$$phase);
                v.$$phase = n
            }

            function d(n, t, i) {
                do n.$$listenerCount[i] -= t, 0 === n.$$listenerCount[i] && delete n.$$listenerCount[i]; while (n = n.$parent)
            }

            function g() {
            }

            function nt() {
                for (; b.length;)try {
                    b.shift()()
                } catch (n) {
                    s(n)
                }
                t = null
            }

            function tt() {
                null === t && (t = a.defer(function () {
                    v.$apply(nt)
                }))
            }

            p.prototype = {
                constructor: p, $new: function (n, t) {
                    function r() {
                        i.$$destroyed = !0
                    }

                    var i;
                    return t = t || this, n ? (i = new p, i.$root = this.$root) : (this.$$ChildScope || (this.$$ChildScope = function () {
                            this.$$watchers = this.$$nextSibling = this.$$childHead = this.$$childTail = null;
                            this.$$listeners = {};
                            this.$$listenerCount = {};
                            this.$id = ++vu;
                            this.$$ChildScope = null
                        }, this.$$ChildScope.prototype = this), i = new this.$$ChildScope), i.$parent = t, i.$$prevSibling = t.$$childTail, t.$$childHead ? (t.$$childTail.$$nextSibling = i, t.$$childTail = i) : t.$$childHead = t.$$childTail = i, (n || t != this) && i.$on("$destroy", r), i
                }, $watch: function (t, i, r) {
                    var f = l(t), u, e;
                    return f.$$watchDelegate ? f.$$watchDelegate(this, i, r, f) : (u = this.$$watchers, e = {
                            fn: i,
                            last: g,
                            get: f,
                            exp: t,
                            eq: !!r
                        }, n = null, o(i) || (e.fn = h), u || (u = this.$$watchers = []), u.unshift(e), function () {
                            di(u, e);
                            n = null
                        })
                }, $watchGroup: function (n, t) {
                    function c() {
                        o = !1;
                        h ? (h = !1, t(i, i, u)) : t(i, f, u)
                    }

                    var f = Array(n.length), i = Array(n.length), e = [], u = this, o = !1, h = !0, s;
                    return n.length ? 1 === n.length ? this.$watch(n[0], function (n, r, u) {
                                i[0] = n;
                                f[0] = r;
                                t(i, n === r ? i : f, u)
                            }) : (r(n, function (n, t) {
                                var r = u.$watch(n, function (n, r) {
                                    i[t] = n;
                                    f[t] = r;
                                    o || (o = !0, u.$evalAsync(c))
                                });
                                e.push(r)
                            }), function () {
                                for (; e.length;)e.shift()()
                            }) : (s = !0, u.$evalAsync(function () {
                            s && t(i, i, u)
                        }), function () {
                            s = !1
                        })
                }, $watchCollection: function (n, t) {
                    function s(n) {
                        i = n;
                        var t, h, o, s;
                        if (!e(i)) {
                            if (c(i))if (pi(i))for (r !== a && (r = a, f = r.length = 0, u++), n = i.length, f !== n && (u++, r.length = f = n), t = 0; t < n; t++)s = r[t], o = i[t], h = s !== s && o !== o, h || s === o || (u++, r[t] = o); else {
                                r !== v && (r = v = {}, f = 0, u++);
                                n = 0;
                                for (t in i)i.hasOwnProperty(t) && (n++, o = i[t], s = r[t], t in r ? (h = s !== s && o !== o, h || s === o || (u++, r[t] = o)) : (f++, r[t] = o, u++));
                                if (f > n)for (t in u++, r)i.hasOwnProperty(t) || (f--, delete r[t])
                            } else r !== i && (r = i, u++);
                            return u
                        }
                    }

                    s.$stateful = !0;
                    var h = this, i, r, o, p = 1 < t.length, u = 0, w = l(n, s), a = [], v = {}, y = !0, f = 0;
                    return this.$watch(w, function () {
                        if (y ? (y = !1, t(i, i, h)) : t(i, o, h), p)if (c(i))if (pi(i)) {
                            o = Array(i.length);
                            for (var n = 0; n < i.length; n++)o[n] = i[n]
                        } else for (n in o = {}, i)fs.call(i, n) && (o[n] = i[n]); else o = i
                    })
                }, $digest: function () {
                    var r, e, h, c, tt, l, rt = i, f, p = [], b, d;
                    k("$digest");
                    a.$$checkUrlChange();
                    this === v && null !== t && (a.defer.cancel(t), nt());
                    n = null;
                    do {
                        for (l = !1, f = this; y.length;) {
                            try {
                                d = y.shift();
                                d.scope.$eval(d.expression, d.locals)
                            } catch (ut) {
                                s(ut)
                            }
                            n = null
                        }
                        n:do {
                            if (c = f.$$watchers)for (tt = c.length; tt--;)try {
                                if (r = c[tt])if ((e = r.get(f)) === (h = r.last) || (r.eq ? it(e, h) : "number" == typeof e && "number" == typeof h && isNaN(e) && isNaN(h))) {
                                    if (r === n) {
                                        l = !1;
                                        break n
                                    }
                                } else l = !0, n = r, r.last = r.eq ? ni(e, null) : e, r.fn(e, h === g ? e : h, f), 5 > rt && (b = 4 - rt, p[b] || (p[b] = []), p[b].push({
                                    msg: o(r.exp) ? "fn: " + (r.exp.name || r.exp.toString()) : r.exp,
                                    newVal: e,
                                    oldVal: h
                                }))
                            } catch (ft) {
                                s(ft)
                            }
                            if (!(c = f.$$childHead || f !== this && f.$$nextSibling))for (; f !== this && !(c = f.$$nextSibling);)f = f.$parent
                        } while (f = c);
                        if ((l || y.length) && !rt--)throw v.$$phase = null, u("infdig", i, p);
                    } while (l || y.length);
                    for (v.$$phase = null; w.length;)try {
                        w.shift()()
                    } catch (et) {
                        s(et)
                    }
                }, $destroy: function () {
                    var n, t;
                    if (!this.$$destroyed && (n = this.$parent, this.$broadcast("$destroy"), this.$$destroyed = !0, this !== v)) {
                        for (t in this.$$listenerCount)d(this, this.$$listenerCount[t], t);
                        n.$$childHead == this && (n.$$childHead = this.$$nextSibling);
                        n.$$childTail == this && (n.$$childTail = this.$$prevSibling);
                        this.$$prevSibling && (this.$$prevSibling.$$nextSibling = this.$$nextSibling);
                        this.$$nextSibling && (this.$$nextSibling.$$prevSibling = this.$$prevSibling);
                        this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = h;
                        this.$on = this.$watch = this.$watchGroup = function () {
                            return h
                        };
                        this.$$listeners = {};
                        this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = this.$root = this.$$watchers = null
                    }
                }, $eval: function (n, t) {
                    return l(n)(this, t)
                }, $evalAsync: function (n, t) {
                    v.$$phase || y.length || a.defer(function () {
                        y.length && v.$digest()
                    });
                    y.push({scope: this, expression: n, locals: t})
                }, $$postDigest: function (n) {
                    w.push(n)
                }, $apply: function (n) {
                    try {
                        return k("$apply"), this.$eval(n)
                    } catch (i) {
                        s(i)
                    } finally {
                        v.$$phase = null;
                        try {
                            v.$digest()
                        } catch (t) {
                            throw s(t), t;
                        }
                    }
                }, $applyAsync: function (n) {
                    function t() {
                        i.$eval(n)
                    }

                    var i = this;
                    n && b.push(t);
                    tt()
                }, $on: function (n, t) {
                    var r = this.$$listeners[n], i, u;
                    r || (this.$$listeners[n] = r = []);
                    r.push(t);
                    i = this;
                    do i.$$listenerCount[n] || (i.$$listenerCount[n] = 0), i.$$listenerCount[n]++; while (i = i.$parent);
                    return u = this, function () {
                        var i = r.indexOf(t);
                        -1 !== i && (r[i] = null, d(u, 1, n))
                    }
                }, $emit: function (n) {
                    var o = [], u, r = this, e = !1, t = {
                        name: n, targetScope: r, stopPropagation: function () {
                            e = !0
                        }, preventDefault: function () {
                            t.defaultPrevented = !0
                        }, defaultPrevented: !1
                    }, h = gi([t], arguments, 1), i, f;
                    do {
                        for (u = r.$$listeners[n] || o, t.currentScope = r, i = 0, f = u.length; i < f; i++)if (u[i])try {
                            u[i].apply(null, h)
                        } catch (c) {
                            s(c)
                        } else u.splice(i, 1), i--, f--;
                        if (e)return t.currentScope = null, t;
                        r = r.$parent
                    } while (r);
                    return t.currentScope = null, t
                }, $broadcast: function (n) {
                    var t = this, i = this, u = {
                        name: n, targetScope: this, preventDefault: function () {
                            u.defaultPrevented = !0
                        }, defaultPrevented: !1
                    }, e, r, f;
                    if (!this.$$listenerCount[n])return u;
                    for (e = gi([u], arguments, 1); t = i;) {
                        for (u.currentScope = t, i = t.$$listeners[n] || [], r = 0, f = i.length; r < f; r++)if (i[r])try {
                            i[r].apply(null, e)
                        } catch (o) {
                            s(o)
                        } else i.splice(r, 1), r--, f--;
                        if (!(i = t.$$listenerCount[n] && t.$$childHead || t !== this && t.$$nextSibling))for (; t !== this && !(i = t.$$nextSibling);)t = t.$parent
                    }
                    return u.currentScope = null, u
                }
            };
            var v = new p, y = v.$$asyncQueue = [], w = v.$$postDigestQueue = [], b = v.$$applyAsyncQueue = [];
            return v
        }]
    }

    function cl() {
        var n = /^\s*(https?|ftp|mailto|tel|file):/, t = /^\s*((https?|ftp|file|blob):|data:image\/)/;
        this.aHrefSanitizationWhitelist = function (t) {
            return u(t) ? (n = t, this) : n
        };
        this.imgSrcSanitizationWhitelist = function (n) {
            return u(n) ? (t = n, this) : t
        };
        this.$get = function () {
            return function (i, r) {
                var f = r ? t : n, u;
                return u = dt(i).href, "" === u || u.match(f) ? i : "unsafe:" + u
            }
        }
    }

    function ll(n) {
        if ("self" === n)return n;
        if (a(n)) {
            if (-1 < n.indexOf("***"))throw gt("iwcard", n);
            return n = es(n).replace("\\*\\*", ".*").replace("\\*", "[^:/.?&;]*"), new RegExp("^" + n + "$")
        }
        if (br(n))return new RegExp("^" + n.source + "$");
        throw gt("imatcher");
    }

    function co(n) {
        var t = [];
        return u(n) && r(n, function (n) {
            t.push(ll(n))
        }), t
    }

    function al() {
        this.SCE_CONTEXTS = st;
        var n = ["self"], t = [];
        this.resourceUrlWhitelist = function (t) {
            return arguments.length && (n = co(t)), n
        };
        this.resourceUrlBlacklist = function (n) {
            return arguments.length && (t = co(n)), t
        };
        this.$get = ["$injector", function (r) {
            function o(n, t) {
                return "self" === n ? lo(t) : !!n.exec(t.href)
            }

            function f(n) {
                var t = function (n) {
                    this.$$unwrapTrustedValue = function () {
                        return n
                    }
                };
                return n && (t.prototype = new n), t.prototype.valueOf = function () {
                    return this.$$unwrapTrustedValue()
                }, t.prototype.toString = function () {
                    return this.$$unwrapTrustedValue().toString()
                }, t
            }

            var s = function () {
                throw gt("unsafe");
            }, e, u;
            return r.has("$sanitize") && (s = r.get("$sanitize")), e = f(), u = {}, u[st.HTML] = f(e), u[st.CSS] = f(e), u[st.URL] = f(e), u[st.JS] = f(e), u[st.RESOURCE_URL] = f(u[st.URL]), {
                trustAs: function (n, t) {
                    var r = u.hasOwnProperty(n) ? u[n] : null;
                    if (!r)throw gt("icontext", n, t);
                    if (null === t || t === i || "" === t)return t;
                    if ("string" != typeof t)throw gt("itype", n);
                    return new r(t)
                }, getTrusted: function (r, f) {
                    var h, e, l, c;
                    if (null === f || f === i || "" === f)return f;
                    if (h = u.hasOwnProperty(r) ? u[r] : null, h && f instanceof h)return f.$$unwrapTrustedValue();
                    if (r === st.RESOURCE_URL) {
                        for (h = dt(f.toString()), c = !1, e = 0, l = n.length; e < l; e++)if (o(n[e], h)) {
                            c = !0;
                            break
                        }
                        if (c)for (e = 0, l = t.length; e < l; e++)if (o(t[e], h)) {
                            c = !1;
                            break
                        }
                        if (c)return f;
                        throw gt("insecurl", f.toString());
                    }
                    if (r === st.HTML)return s(f);
                    throw gt("unsafe");
                }, valueOf: function (n) {
                    return n instanceof e ? n.$$unwrapTrustedValue() : n
                }
            }
        }]
    }

    function vl() {
        var n = !0;
        this.enabled = function (t) {
            return arguments.length && (n = !!t), n
        };
        this.$get = ["$parse", "$sceDelegate", function (t, i) {
            var u;
            if (n && 8 > li)throw gt("iequirks");
            u = lt(st);
            u.isEnabled = function () {
                return n
            };
            u.trustAs = i.trustAs;
            u.getTrusted = i.getTrusted;
            u.valueOf = i.valueOf;
            n || (u.trustAs = u.getTrusted = function (n, t) {
                return t
            }, u.valueOf = ht);
            u.parseAs = function (n, i) {
                var r = t(i);
                return r.literal && r.constant ? r : t(i, function (t) {
                        return u.getTrusted(n, t)
                    })
            };
            var f = u.parseAs, e = u.getTrusted, o = u.trustAs;
            return r(st, function (n, t) {
                var i = y(t);
                u[tr("parse_as_" + i)] = function (t) {
                    return f(n, t)
                };
                u[tr("get_trusted_" + i)] = function (t) {
                    return e(n, t)
                };
                u[tr("trust_as_" + i)] = function (t) {
                    return o(n, t)
                }
            }), u
        }]
    }

    function yl() {
        this.$get = ["$window", "$document", function (n, t) {
            var s = {}, h = g((/android (\d+)/.exec(y((n.navigator || {}).userAgent)) || [])[1]), l = /Boxee/i.test((n.navigator || {}).userAgent), f = t[0] || {}, i, r = f.body && f.body.style, u = !1, o = !1, c;
            if (r) {
                for (c in r)if (u = /^(Moz|webkit|ms)(?=[A-Z])/.exec(c)) {
                    i = u[0];
                    i = i.substr(0, 1).toUpperCase() + i.substr(1);
                    break
                }
                i || (i = "WebkitOpacity" in r && "webkit");
                u = !!("transition" in r || i + "Transition" in r);
                o = !!("animation" in r || i + "Animation" in r);
                !h || u && o || (u = a(f.body.style.webkitTransition), o = a(f.body.style.webkitAnimation))
            }
            return {
                history: !(!n.history || !n.history.pushState || 4 > h || l), hasEvent: function (n) {
                    if ("input" === n && 11 >= li)return !1;
                    if (e(s[n])) {
                        var t = f.createElement("div");
                        s[n] = "on" + n in t
                    }
                    return s[n]
                }, csp: hr(), vendorPrefix: i, transitions: u, animations: o, android: h
            }
        }]
    }

    function pl() {
        this.$get = ["$templateCache", "$http", "$q", function (n, t, i) {
            function r(u, f) {
                r.totalPendingRequests++;
                var e = t.defaults && t.defaults.transformResponse;
                return s(e) ? e = e.filter(function (n) {
                        return n !== uf
                    }) : e === uf && (e = null), t.get(u, {cache: n, transformResponse: e}).finally(function () {
                    r.totalPendingRequests--
                }).then(function (n) {
                    return n.data
                }, function (n) {
                    if (!f)throw et("tpload", u);
                    return i.reject(n)
                })
            }

            return r.totalPendingRequests = 0, r
        }]
    }

    function wl() {
        this.$get = ["$rootScope", "$browser", "$location", function (n, t, i) {
            return {
                findBindings: function (n, t, i) {
                    n = n.getElementsByClassName("ng-binding");
                    var u = [];
                    return r(n, function (n) {
                        var f = nt.element(n).data("$binding");
                        f && r(f, function (r) {
                            i ? new RegExp("(^|\\s)" + es(t) + "(\\s|\\||$)").test(r) && u.push(n) : -1 != r.indexOf(t) && u.push(n)
                        })
                    }), u
                }, findModels: function (n, t, i) {
                    for (var f, u = ["ng-", "data-ng-", "ng\\:"], r = 0; r < u.length; ++r)if (f = n.querySelectorAll("[" + u[r] + "model" + (i ? "=" : "*=") + '"' + t + '"]'), f.length)return f
                }, getLocation: function () {
                    return i.url()
                }, setLocation: function (t) {
                    t !== i.url() && (i.url(t), n.$digest())
                }, whenStable: function (n) {
                    t.notifyWhenNoOutstandingRequests(n)
                }
            }
        }]
    }

    function bl() {
        this.$get = ["$rootScope", "$browser", "$q", "$$q", "$exceptionHandler", function (n, t, i, r, f) {
            function o(o, s, h) {
                var a = u(h) && !h, c = (a ? r : i).defer(), l = c.promise;
                return s = t.defer(function () {
                    try {
                        c.resolve(o())
                    } catch (t) {
                        c.reject(t);
                        f(t)
                    } finally {
                        delete e[l.$$timeoutId]
                    }
                    a || n.$apply()
                }, s), l.$$timeoutId = s, e[s] = c, l
            }

            var e = {};
            return o.cancel = function (n) {
                return n && n.$$timeoutId in e ? (e[n.$$timeoutId].reject("canceled"), delete e[n.$$timeoutId], t.defer.cancel(n.$$timeoutId)) : !1
            }, o
        }]
    }

    function dt(n) {
        return li && (d.setAttribute("href", n), n = d.href), d.setAttribute("href", n), {
            href: d.href,
            protocol: d.protocol ? d.protocol.replace(/:$/, "") : "",
            host: d.host,
            search: d.search ? d.search.replace(/^\?/, "") : "",
            hash: d.hash ? d.hash.replace(/^#/, "") : "",
            hostname: d.hostname,
            port: d.port,
            pathname: "/" === d.pathname.charAt(0) ? d.pathname : "/" + d.pathname
        }
    }

    function lo(n) {
        return n = a(n) ? dt(n) : n, n.protocol === vs.protocol && n.host === vs.host
    }

    function kl() {
        this.$get = tt(n)
    }

    function ao(n) {
        function t(i, u) {
            if (c(i)) {
                var f = {};
                return r(i, function (n, i) {
                    f[i] = t(i, n)
                }), f
            }
            return n.factory(i + "Filter", u)
        }

        this.register = t;
        this.$get = ["$injector", function (n) {
            return function (t) {
                return n.get(t + "Filter")
            }
        }];
        t("currency", vo);
        t("date", ko);
        t("filter", dl);
        t("json", na);
        t("limitTo", ta);
        t("lowercase", ps);
        t("number", yo);
        t("orderBy", go);
        t("uppercase", ws)
    }

    function dl() {
        return function (n, t, i) {
            if (!s(n))return n;
            var r;
            switch (typeof t) {
                case"function":
                    break;
                case"boolean":
                case"number":
                case"string":
                    r = !0;
                case"object":
                    t = gl(t, i, r);
                    break;
                default:
                    return n
            }
            return n.filter(t)
        }
    }

    function gl(n, t, i) {
        var r = c(n) && "$" in n;
        return !0 === t ? t = it : o(t) || (t = function (n, t) {
                return c(n) || c(t) ? !1 : (n = y("" + n), t = y("" + t), -1 !== n.indexOf(t))
            }), function (u) {
            return r && !c(u) ? ri(u, n.$, t, !1) : ri(u, n, t, i)
        }
    }

    function ri(n, t, i, r, u) {
        var e = typeof n, h = typeof t, f;
        if ("string" === h && "!" === t.charAt(0))return !ri(n, t.substring(1), i, r);
        if (s(n))return n.some(function (n) {
            return ri(n, t, i, r)
        });
        switch (e) {
            case"object":
                if (r) {
                    for (f in n)if ("$" !== f.charAt(0) && ri(n[f], t, i, !0))return !0;
                    return u ? !1 : ri(n, t, i, !1)
                }
                if ("object" === h) {
                    for (f in t)if (u = t[f], !o(u) && (e = "$" === f, !ri(e ? n : n[f], u, i, e, e)))return !1;
                    return !0
                }
                return i(n, t);
            case"function":
                return !1;
            default:
                return i(n, t)
        }
    }

    function vo(n) {
        var t = n.NUMBER_FORMATS;
        return function (n, i, r) {
            return e(i) && (i = t.CURRENCY_SYM), e(r) && (r = t.PATTERNS[1].maxFrac), null == n ? n : po(n, t.PATTERNS[1], t.GROUP_SEP, t.DECIMAL_SEP, r).replace(/\u00A4/g, i)
        }
    }

    function yo(n) {
        var t = n.NUMBER_FORMATS;
        return function (n, i) {
            return null == n ? n : po(n, t.PATTERNS[0], t.GROUP_SEP, t.DECIMAL_SEP, i)
        }
    }

    function po(n, t, i, r, u) {
        var l, f;
        if (!isFinite(n) || c(n))return "";
        l = 0 > n;
        n = Math.abs(n);
        var o = n + "", s = "", y = [], h = !1;
        if (-1 !== o.indexOf("e") && (f = o.match(/([\d\.]+)e(-?)(\d+)/), f && "-" == f[2] && f[3] > u + 1 ? n = 0 : (s = o, h = !0)), h) 0 < u && 1 > n && (s = n.toFixed(u), n = parseFloat(s)); else {
            o = (o.split(ys)[1] || "").length;
            e(u) && (u = Math.min(Math.max(t.minFrac, o), t.maxFrac));
            n = +(Math.round(+(n.toString() + "e" + u)).toString() + "e" + -u);
            var o = ("" + n).split(ys), h = o[0], o = o[1] || "", a = 0, v = t.lgSize, p = t.gSize;
            if (h.length >= v + p)for (a = h.length - v, f = 0; f < a; f++)0 == (a - f) % p && 0 !== f && (s += i), s += h.charAt(f);
            for (f = a; f < h.length; f++)0 == (h.length - f) % v && 0 !== f && (s += i), s += h.charAt(f);
            for (; o.length < u;)o += "0";
            u && "0" !== u && (s += r + o.substr(0, u))
        }
        return 0 === n && (l = !1), y.push(l ? t.negPre : t.posPre, s, l ? t.negSuf : t.posSuf), y.join("")
    }

    function hu(n, t, i) {
        var r = "";
        for (0 > n && (r = "-", n = -n), n = "" + n; n.length < t;)n = "0" + n;
        return i && (n = n.substr(n.length - t)), r + n
    }

    function k(n, t, i, r) {
        return i = i || 0, function (u) {
            return u = u["get" + n](), (0 < i || u > -i) && (u += i), 0 === u && -12 == i && (u = 12), hu(u, t, r)
        }
    }

    function cu(n, t) {
        return function (i, r) {
            var u = i["get" + n](), f = au(t ? "SHORT" + n : n);
            return r[f][u]
        }
    }

    function wo(n) {
        var t = new Date(n, 0, 1).getDay();
        return new Date(n, 0, (4 >= t ? 5 : 12) - t)
    }

    function bo(n) {
        return function (t) {
            var i = wo(t.getFullYear());
            return t = +new Date(t.getFullYear(), t.getMonth(), t.getDate() + (4 - t.getDay())) - +i, t = 1 + Math.round(t / 6048e5), hu(t, n)
        }
    }

    function ko(n) {
        function t(n) {
            var t;
            if (t = n.match(i)) {
                n = new Date(0);
                var r = 0, u = 0, f = t[8] ? n.setUTCFullYear : n.setFullYear, e = t[8] ? n.setUTCHours : n.setHours;
                t[9] && (r = g(t[9] + t[10]), u = g(t[9] + t[11]));
                f.call(n, g(t[1]), g(t[2]) - 1, g(t[3]));
                r = g(t[4] || 0) - r;
                u = g(t[5] || 0) - u;
                f = g(t[6] || 0);
                t = Math.round(1e3 * parseFloat("0." + (t[7] || 0)));
                e.call(n, r, u, f, t)
            }
            return n
        }

        var i = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
        return function (i, u, f) {
            var s = "", e = [], o, h;
            if (u = u || "mediumDate", u = n.DATETIME_FORMATS[u] || u, a(i) && (i = vv.test(i) ? g(i) : t(i)), b(i) && (i = new Date(i)), !ct(i))return i;
            for (; u;)(h = av.exec(u)) ? (e = gi(e, h, 1), u = e.pop()) : (e.push(u), u = null);
            return f && "UTC" === f && (i = new Date(i.getTime()), i.setMinutes(i.getMinutes() + i.getTimezoneOffset())), r(e, function (t) {
                o = lv[t];
                s += o ? o(i, n.DATETIME_FORMATS) : t.replace(/(^'|'$)/g, "").replace(/''/g, "'")
            }), s
        }
    }

    function na() {
        return function (n, t) {
            return e(t) && (t = 2), nr(n, t)
        }
    }

    function ta() {
        return function (n, t) {
            return b(n) && (n = n.toString()), s(n) || a(n) ? (t = Infinity === Math.abs(Number(t)) ? Number(t) : g(t)) ? 0 < t ? n.slice(0, t) : n.slice(t) : a(n) ? "" : [] : n
        }
    }

    function go(n) {
        return function (t, i, r) {
            function u(n, t) {
                return t ? function (t, i) {
                        return n(i, t)
                    } : n
            }

            function e(n) {
                switch (typeof n) {
                    case"number":
                    case"boolean":
                    case"string":
                        return !0;
                    default:
                        return !1
                }
            }

            function o(n) {
                return null === n ? "null" : "function" == typeof n.valueOf && (n = n.valueOf(), e(n)) || "function" == typeof n.toString && (n = n.toString(), e(n)) ? n : ""
            }

            function f(n, t) {
                var i = typeof n, r = typeof t;
                return i === r && "object" === i && (n = o(n), t = o(t)), i === r ? ("string" === i && (n = n.toLowerCase(), t = t.toLowerCase()), n === t ? 0 : n < t ? -1 : 1) : i < r ? -1 : 1
            }

            return pi(t) ? (i = s(i) ? i : [i], 0 === i.length && (i = ["+"]), i = i.map(function (t) {
                    var r = !1, i = t || ht, e;
                    if (a(t)) {
                        if (("+" == t.charAt(0) || "-" == t.charAt(0)) && (r = "-" == t.charAt(0), t = t.substring(1)), "" === t)return u(f, r);
                        if (i = n(t), i.constant)return e = i(), u(function (n, t) {
                            return f(n[e], t[e])
                        }, r)
                    }
                    return u(function (n, t) {
                        return f(i(n), i(t))
                    }, r)
                }), or.call(t).sort(u(function (n, t) {
                    for (var u, r = 0; r < i.length; r++)if (u = i[r](n, t), 0 !== u)return u;
                    return 0
                }, r))) : t
        }
    }

    function ui(n) {
        return o(n) && (n = {link: n}), n.restrict = n.restrict || "AC", tt(n)
    }

    function ns(n, t, u, f, e) {
        var o = this, s = [], h = o.$$parentForm = n.parent().controller("form") || pr;
        o.$error = {};
        o.$$success = {};
        o.$pending = i;
        o.$name = e(t.name || t.ngForm || "")(u);
        o.$dirty = !1;
        o.$pristine = !0;
        o.$valid = !0;
        o.$invalid = !1;
        o.$submitted = !1;
        h.$addControl(o);
        o.$rollbackViewValue = function () {
            r(s, function (n) {
                n.$rollbackViewValue()
            })
        };
        o.$commitViewValue = function () {
            r(s, function (n) {
                n.$commitViewValue()
            })
        };
        o.$addControl = function (n) {
            si(n.$name, "input");
            s.push(n);
            n.$name && (o[n.$name] = n)
        };
        o.$$renameControl = function (n, t) {
            var i = n.$name;
            o[i] === n && delete o[i];
            o[t] = n;
            n.$name = t
        };
        o.$removeControl = function (n) {
            n.$name && o[n.$name] === n && delete o[n.$name];
            r(o.$pending, function (t, i) {
                o.$setValidity(i, null, n)
            });
            r(o.$error, function (t, i) {
                o.$setValidity(i, null, n)
            });
            r(o.$$success, function (t, i) {
                o.$setValidity(i, null, n)
            });
            di(s, n)
        };
        rs({
            ctrl: this, $element: n, set: function (n, t, i) {
                var r = n[t];
                r ? -1 === r.indexOf(i) && r.push(i) : n[t] = [i]
            }, unset: function (n, t, i) {
                var r = n[t];
                r && (di(r, i), 0 === r.length && delete n[t])
            }, parentForm: h, $animate: f
        });
        o.$setDirty = function () {
            f.removeClass(n, yi);
            f.addClass(n, bu);
            o.$dirty = !0;
            o.$pristine = !1;
            h.$setDirty()
        };
        o.$setPristine = function () {
            f.setClass(n, yi, bu + " ng-submitted");
            o.$dirty = !1;
            o.$pristine = !0;
            o.$submitted = !1;
            r(s, function (n) {
                n.$setPristine()
            })
        };
        o.$setUntouched = function () {
            r(s, function (n) {
                n.$setUntouched()
            })
        };
        o.$setSubmitted = function () {
            f.addClass(n, "ng-submitted");
            o.$submitted = !0;
            h.$setSubmitted()
        }
    }

    function lf(n) {
        n.$formatters.push(function (t) {
            return n.$isEmpty(t) ? t : t.toString()
        })
    }

    function fr(n, t, i, r, u, f) {
        var c = y(t[0].type), s, o, e, h;
        if (!u.android) {
            s = !1;
            t.on("compositionstart", function () {
                s = !0
            });
            t.on("compositionend", function () {
                s = !1;
                o()
            })
        }
        if (o = function (n) {
                if (e && (f.defer.cancel(e), e = null), !s) {
                    var u = t.val();
                    n = n && n.type;
                    "password" === c || i.ngTrim && "false" === i.ngTrim || (u = p(u));
                    (r.$viewValue !== u || "" === u && r.$$hasNativeValidators) && r.$setViewValue(u, n)
                }
            }, u.hasEvent("input")) t.on("input", o); else {
            h = function (n, t, i) {
                e || (e = f.defer(function () {
                    e = null;
                    t && t.value === i || o(n)
                }))
            };
            t.on("keydown", function (n) {
                var t = n.keyCode;
                91 === t || 15 < t && 19 > t || 37 <= t && 40 >= t || h(n, this, this.value)
            });
            if (u.hasEvent("paste")) t.on("paste cut", h)
        }
        t.on("change", o);
        r.$render = function () {
            t.val(r.$isEmpty(r.$viewValue) ? "" : r.$viewValue)
        }
    }

    function lu(n, t) {
        return function (i, u) {
            var e, f;
            if (ct(i))return i;
            if (a(i)) {
                if ('"' == i.charAt(0) && '"' == i.charAt(i.length - 1) && (i = i.substring(1, i.length - 1)), wv.test(i))return new Date(i);
                if (n.lastIndex = 0, e = n.exec(i))return e.shift(), f = u ? {
                        yyyy: u.getFullYear(),
                        MM: u.getMonth() + 1,
                        dd: u.getDate(),
                        HH: u.getHours(),
                        mm: u.getMinutes(),
                        ss: u.getSeconds(),
                        sss: u.getMilliseconds() / 1e3
                    } : {yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0}, r(e, function (n, i) {
                    i < t.length && (f[t[i]] = +n)
                }), new Date(f.yyyy, f.MM - 1, f.dd, f.HH, f.mm, f.ss || 0, 1e3 * f.sss || 0)
            }
            return NaN
        }
    }

    function er(n, t, r, f) {
        return function (o, s, h, c, l, a, v) {
            function w(n) {
                return n && !(n.getTime && n.getTime() !== n.getTime())
            }

            function d(n) {
                return u(n) ? ct(n) ? n : r(n) : i
            }

            var p, y, b, k;
            ts(o, s, h, c);
            fr(o, s, h, c, l, a);
            p = c && c.$options && c.$options.timezone;
            c.$$parserName = n;
            c.$parsers.push(function (n) {
                return c.$isEmpty(n) ? null : t.test(n) ? (n = r(n, y), "UTC" === p && n.setMinutes(n.getMinutes() - n.getTimezoneOffset()), n) : i
            });
            c.$formatters.push(function (n) {
                if (n && !ct(n))throw ku("datefmt", n);
                if (w(n)) {
                    if ((y = n) && "UTC" === p) {
                        var t = 6e4 * y.getTimezoneOffset();
                        y = new Date(y.getTime() + t)
                    }
                    return v("date")(n, f, p)
                }
                return y = null, ""
            });
            (u(h.min) || h.ngMin) && (c.$validators.min = function (n) {
                return !w(n) || e(b) || r(n) >= b
            }, h.$observe("min", function (n) {
                b = d(n);
                c.$validate()
            }));
            (u(h.max) || h.ngMax) && (c.$validators.max = function (n) {
                return !w(n) || e(k) || r(n) <= k
            }, h.$observe("max", function (n) {
                k = d(n);
                c.$validate()
            }))
        }
    }

    function ts(n, t, r, u) {
        (u.$$hasNativeValidators = c(t[0].validity)) && u.$parsers.push(function (n) {
            var r = t.prop("validity") || {};
            return r.badInput && !r.typeMismatch ? i : n
        })
    }

    function is(n, t, i, r, f) {
        if (u(r)) {
            if (n = n(r), !n.constant)throw v("ngModel")("constexpr", i, r);
            return n(t)
        }
        return f
    }

    function af(n, t) {
        return n = "ngClass" + n, ["$animate", function (i) {
            function f(n, t) {
                var f = [], r = 0, u, i;
                n:for (; r < n.length; r++) {
                    for (u = n[r], i = 0; i < t.length; i++)if (u == t[i])continue n;
                    f.push(u)
                }
                return f
            }

            function u(n) {
                if (!s(n)) {
                    if (a(n))return n.split(" ");
                    if (c(n)) {
                        var t = [];
                        return r(n, function (n, i) {
                            n && (t = t.concat(i.split(" ")))
                        }), t
                    }
                }
                return n
            }

            return {
                restrict: "AC", link: function (e, o, s) {
                    function h(n, t) {
                        var i = o.data("$classCounts") || {}, u = [];
                        return r(n, function (n) {
                            (0 < t || i[n]) && (i[n] = (i[n] || 0) + t, i[n] === +(0 < t) && u.push(n))
                        }), o.data("$classCounts", i), u.join(" ")
                    }

                    function l(n) {
                        var r, l;
                        if (!0 === t || e.$index % 2 === t)if (r = u(n || []), c) {
                            if (!it(n, c)) {
                                var a = u(c), l = f(r, a), r = f(a, r), l = h(l, 1), r = h(r, -1);
                                l && l.length && i.addClass(o, l);
                                r && r.length && i.removeClass(o, r)
                            }
                        } else l = h(r, 1), s.$addClass(l);
                        c = lt(n)
                    }

                    var c;
                    e.$watch(s[n], l, !0);
                    s.$observe("class", function () {
                        l(e.$eval(s[n]))
                    });
                    "ngClass" !== n && e.$watch("$index", function (i, r) {
                        var f = i & 1, o;
                        f !== (r & 1) && (o = u(e.$eval(s[n])), f === t ? (f = h(o, 1), s.$addClass(f)) : (f = h(o, -1), s.$removeClass(f)))
                    })
                }
            }
        }]
    }

    function rs(n) {
        function f(n, t) {
            t && !r[n] ? (h.addClass(o, n), r[n] = !0) : !t && r[n] && (h.removeClass(o, n), r[n] = !1)
        }

        function e(n, t) {
            n = n ? "-" + he(n, "-") : "";
            f(wr + n, !0 === t);
            f(fh + n, !1 === t)
        }

        var t = n.ctrl, o = n.$element, r = {}, s = n.set, u = n.unset, c = n.parentForm, h = n.$animate;
        r[fh] = !(r[wr] = o.hasClass(wr));
        t.$setValidity = function (n, r, o) {
            r === i ? (t.$pending || (t.$pending = {}), s(t.$pending, n, o)) : (t.$pending && u(t.$pending, n, o), us(t.$pending) && (t.$pending = i));
            ki(r) ? r ? (u(t.$error, n, o), s(t.$$success, n, o)) : (s(t.$error, n, o), u(t.$$success, n, o)) : (u(t.$error, n, o), u(t.$$success, n, o));
            t.$pending ? (f(eh, !0), t.$valid = t.$invalid = i, e("", null)) : (f(eh, !1), t.$valid = us(t.$error), t.$invalid = !t.$valid, e("", t.$valid));
            r = t.$pending && t.$pending[n] ? i : t.$error[n] ? !1 : t.$$success[n] ? !0 : null;
            e(n, r);
            c.$setValidity(n, r, t)
        }
    }

    function us(n) {
        if (n)for (var t in n)return !1;
        return !0
    }

    var ia = /^\/(.+)\/([a-z]*)$/, y = function (n) {
        return a(n) ? n.toLowerCase() : n
    }, fs = Object.prototype.hasOwnProperty, au = function (n) {
        return a(n) ? n.toUpperCase() : n
    }, li, f, vt, or = [].slice, ra = [].splice, ua = [].push, fi = Object.prototype.toString, ai = v("ng"), nt = n.angular || (n.angular = {}), sr, vu = 0, cr, ss, ei, lr, wf, bf, vi, ps, ws, bs, yr, pr;
    li = t.documentMode;
    h.$inject = [];
    ht.$inject = [];
    var s = Array.isArray, p = function (n) {
        return a(n) ? n.trim() : n
    }, es = function (n) {
        return n.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08")
    }, hr = function () {
        if (u(hr.isActive_))return hr.isActive_;
        var n = !(!t.querySelector("[ng-csp]") && !t.querySelector("[data-ng-csp]"));
        if (!n)try {
            new Function("")
        } catch (i) {
            n = !0
        }
        return hr.isActive_ = n
    }, yu = ["ng-", "data-ng-", "ng:", "x-ng-"], fa = /[A-Z]/g, os = !1, vf, yt = 1, pu = 3, ea = {
        full: "1.3.14",
        major: 1,
        minor: 3,
        dot: 14,
        codeName: "instantaneous-browserification"
    };
    w.expando = "ng339";
    cr = w.cache = {};
    ss = 1;
    w._data = function (n) {
        return this.cache[n[this.expando]] || {}
    };
    var oa = /([\:\-\_]+(.))/g, sa = /^moz([A-Z])/, ha = {
        mouseleave: "mouseout",
        mouseenter: "mouseover"
    }, yf = v("jqLite"), ca = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, pf = /<|&#?\w+;/, la = /<([\w:]+)/, aa = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, ft = {
        option: [1, '<select multiple="multiple">', "<\/select>"],
        thead: [1, "<table>", "<\/table>"],
        col: [2, "<table><colgroup>", "<\/colgroup><\/table>"],
        tr: [2, "<table><tbody>", "<\/tbody><\/table>"],
        td: [3, "<table><tbody><tr>", "<\/tr><\/tbody><\/table>"],
        _default: [0, "", ""]
    };
    ft.optgroup = ft.option;
    ft.tbody = ft.tfoot = ft.colgroup = ft.caption = ft.thead;
    ft.th = ft.td;
    ei = w.prototype = {
        ready: function (i) {
            function r() {
                u || (u = !0, i())
            }

            var u = !1;
            "complete" === t.readyState ? setTimeout(r) : (this.on("DOMContentLoaded", r), w(n).on("load", r))
        }, toString: function () {
            var n = [];
            return r(this, function (t) {
                n.push("" + t)
            }), "[" + n.join(", ") + "]"
        }, eq: function (n) {
            return 0 <= n ? f(this[n]) : f(this[this.length + n])
        }, length: 0, push: ua, sort: [].sort, splice: [].splice
    };
    lr = {};
    r("multiple selected checked disabled readOnly required open".split(" "), function (n) {
        lr[y(n)] = n
    });
    wf = {};
    r("input select option textarea button form details".split(" "), function (n) {
        wf[n] = !0
    });
    bf = {ngMinlength: "minlength", ngMaxlength: "maxlength", ngMin: "min", ngMax: "max", ngPattern: "pattern"};
    r({data: rf, removeData: tu}, function (n, t) {
        w[t] = n
    });
    r({
        data: rf, inheritedData: eu, scope: function (n) {
            return f.data(n, "$scope") || eu(n.parentNode || n, ["$isolateScope", "$scope"])
        }, isolateScope: function (n) {
            return f.data(n, "$isolateScope") || f.data(n, "$isolateScopeNoTemplate")
        }, controller: pe, injector: function (n) {
            return eu(n, "$injector")
        }, removeAttr: function (n, t) {
            n.removeAttribute(t)
        }, hasClass: ru, css: function (n, t, i) {
            if (t = tr(t), u(i)) n.style[t] = i; else return n.style[t]
        }, attr: function (n, t, r) {
            var f = y(t);
            if (lr[f])if (u(r)) r ? (n[t] = !0, n.setAttribute(t, f)) : (n[t] = !1, n.removeAttribute(f)); else return n[t] || (n.attributes.getNamedItem(t) || h).specified ? f : i; else if (u(r)) n.setAttribute(t, r); else if (n.getAttribute)return n = n.getAttribute(t, 2), null === n ? i : n
        }, prop: function (n, t, i) {
            if (u(i)) n[t] = i; else return n[t]
        }, text: function () {
            function n(n, t) {
                if (e(t)) {
                    var i = n.nodeType;
                    return i === yt || i === pu ? n.textContent : ""
                }
                n.textContent = t
            }

            return n.$dv = "", n
        }(), val: function (n, t) {
            if (e(t)) {
                if (n.multiple && "select" === pt(n)) {
                    var i = [];
                    return r(n.options, function (n) {
                        n.selected && i.push(n.value || n.text)
                    }), 0 === i.length ? null : i
                }
                return n.value
            }
            n.value = t
        }, html: function (n, t) {
            if (e(t))return n.innerHTML;
            nu(n, !0);
            n.innerHTML = t
        }, empty: we
    }, function (n, t) {
        w.prototype[t] = function (t, r) {
            var u, f, e = this.length, o;
            if (n !== we && (2 == n.length && n !== ru && n !== pe ? t : r) === i) {
                if (c(t)) {
                    for (u = 0; u < e; u++)if (n === rf) n(this[u], t); else for (f in t)n(this[u], f, t[f]);
                    return this
                }
                for (u = n.$dv, e = u === i ? Math.min(e, 1) : e, f = 0; f < e; f++)o = n(this[f], t, r), u = u ? u + o : o;
                return u
            }
            for (u = 0; u < e; u++)n(this[u], t, r);
            return this
        }
    });
    r({
        removeData: tu, on: function va(n, t, i, r) {
            var e, f, s, o;
            if (u(r))throw yf("onargs");
            if (le(n))for (f = iu(n, !0), r = f.events, e = f.handle, e || (e = f.handle = rc(n, r)), f = 0 <= t.indexOf(" ") ? t.split(" ") : [t], s = f.length; s--;)t = f[s], o = r[t], o || (r[t] = [], "mouseenter" === t || "mouseleave" === t ? va(n, ha[t], function (n) {
                    var i = n.relatedTarget;
                    i && (i === this || this.contains(i)) || e(n, t)
                }) : "$destroy" !== t && n.addEventListener(t, e, !1), o = r[t]), o.push(i)
        }, off: ve, one: function (n, t, i) {
            n = f(n);
            n.on(t, function r() {
                n.off(t, i);
                n.off(t, r)
            });
            n.on(t, i)
        }, replaceWith: function (n, t) {
            var i, u = n.parentNode;
            nu(n);
            r(new w(t), function (t) {
                i ? u.insertBefore(t, i.nextSibling) : u.replaceChild(t, n);
                i = t
            })
        }, children: function (n) {
            var t = [];
            return r(n.childNodes, function (n) {
                n.nodeType === yt && t.push(n)
            }), t
        }, contents: function (n) {
            return n.contentDocument || n.childNodes || []
        }, append: function (n, t) {
            var i = n.nodeType, r;
            if (i === yt || 11 === i)for (t = new w(t), i = 0, r = t.length; i < r; i++)n.appendChild(t[i])
        }, prepend: function (n, t) {
            if (n.nodeType === yt) {
                var i = n.firstChild;
                r(new w(t), function (t) {
                    n.insertBefore(t, i)
                })
            }
        }, wrap: function (n, t) {
            t = f(t).eq(0).clone()[0];
            var i = n.parentNode;
            i && i.replaceChild(t, n);
            t.appendChild(n)
        }, remove: be, detach: function (n) {
            be(n, !0)
        }, after: function (n, t) {
            var u = n, e = n.parentNode, i, f, r;
            for (t = new w(t), i = 0, f = t.length; i < f; i++)r = t[i], e.insertBefore(r, u.nextSibling), u = r
        }, addClass: fu, removeClass: uu, toggleClass: function (n, t, i) {
            t && r(t.split(" "), function (t) {
                var r = i;
                e(r) && (r = !ru(n, t));
                (r ? fu : uu)(n, t)
            })
        }, parent: function (n) {
            return (n = n.parentNode) && 11 !== n.nodeType ? n : null
        }, next: function (n) {
            return n.nextElementSibling
        }, find: function (n, t) {
            return n.getElementsByTagName ? n.getElementsByTagName(t) : []
        }, clone: tf, triggerHandler: function (n, t, i) {
            var u, e, o = t.type || t, f = iu(n);
            (f = (f = f && f.events) && f[o]) && (u = {
                preventDefault: function () {
                    this.defaultPrevented = !0
                }, isDefaultPrevented: function () {
                    return !0 === this.defaultPrevented
                }, stopImmediatePropagation: function () {
                    this.immediatePropagationStopped = !0
                }, isImmediatePropagationStopped: function () {
                    return !0 === this.immediatePropagationStopped
                }, stopPropagation: h, type: o, target: n
            }, t.type && (u = l(u, t)), t = lt(f), e = i ? [u].concat(i) : [u], r(t, function (t) {
                u.isImmediatePropagationStopped() || t.apply(n, e)
            }))
        }
    }, function (n, t) {
        w.prototype[t] = function (t, i, r) {
            for (var o, s = 0, h = this.length; s < h; s++)e(o) ? (o = n(this[s], t, i, r), u(o) && (o = f(o))) : ye(o, n(this[s], t, i, r));
            return u(o) ? o : this
        };
        w.prototype.bind = w.prototype.on;
        w.prototype.unbind = w.prototype.off
    });
    ir.prototype = {
        put: function (n, t) {
            this[hi(n, this.nextUid)] = t
        }, get: function (n) {
            return this[hi(n, this.nextUid)]
        }, remove: function (n) {
            var t = this[n = hi(n, this.nextUid)];
            return delete this[n], t
        }
    };
    var hs = /^function\s*[^\(]*\(\s*([^\)]*)\)/m, ya = /,/, pa = /^\s*(_?)(\S+?)\1\s*$/, cs = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg, oi = v("$injector");
    rr.$$annotate = function (n, t, i) {
        var u;
        if ("function" == typeof n) {
            if (!(u = n.$inject)) {
                if (u = [], n.length) {
                    if (t)throw a(i) && i || (i = n.name || fc(n)), oi("strictdi", i);
                    t = n.toString().replace(cs, "");
                    t = t.match(hs);
                    r(t[1].split(ya), function (n) {
                        n.replace(pa, function (n, t, i) {
                            u.push(i)
                        })
                    })
                }
                n.$inject = u
            }
        } else s(n) ? (t = n.length - 1, dr(n[t], "fn"), u = n.slice(0, t)) : dr(n, "fn", !0);
        return u
    };
    var wa = v("$animate"), ba = ["$provide", function (n) {
        this.$$selectors = {};
        this.register = function (t, i) {
            var r = t + "-animation";
            if (t && "." != t.charAt(0))throw wa("notcsel", t);
            this.$$selectors[t.substr(1)] = r;
            n.factory(r, i)
        };
        this.classNameFilter = function (n) {
            return 1 === arguments.length && (this.$$classNameFilter = n instanceof RegExp ? n : null), this.$$classNameFilter
        };
        this.$get = ["$$q", "$$asyncCallback", "$rootScope", function (n, t, i) {
            function v(t) {
                var r, u = n.defer();
                return u.promise.$$cancelFn = function () {
                    r && r()
                }, i.$$postDigest(function () {
                    r = t(function () {
                        u.resolve()
                    })
                }), u.promise
            }

            function y(n, t) {
                var i = [], u = [], f = rt();
                return r((n.attr("class") || "").split(/\s+/), function (n) {
                    f[n] = !0
                }), r(t, function (n, t) {
                    var r = f[t];
                    !1 === n && r ? u.push(t) : !0 !== n || r || i.push(t)
                }), 0 < i.length + u.length && [i.length ? i : null, u.length ? u : null]
            }

            function c(n, t, i) {
                for (var r = 0, u = t.length; r < u; ++r)n[t[r]] = i
            }

            function u() {
                return o || (o = n.defer(), t(function () {
                    o.resolve();
                    o = null
                })), o.promise
            }

            function e(n, t) {
                if (nt.isObject(t)) {
                    var i = l(t.from || {}, t.to || {});
                    n.css(i)
                }
            }

            var o;
            return {
                animate: function (n, t, i) {
                    return e(n, {from: t, to: i}), u()
                }, enter: function (n, t, i, r) {
                    return e(n, r), i ? i.after(n) : t.prepend(n), u()
                }, leave: function (n) {
                    return n.remove(), u()
                }, move: function (n, t, i, r) {
                    return this.enter(n, t, i, r)
                }, addClass: function (n, t, i) {
                    return this.setClass(n, t, [], i)
                }, $$addClassImmediately: function (n, t, i) {
                    return n = f(n), t = a(t) ? t : s(t) ? t.join(" ") : "", r(n, function (n) {
                        fu(n, t)
                    }), e(n, i), u()
                }, removeClass: function (n, t, i) {
                    return this.setClass(n, [], t, i)
                }, $$removeClassImmediately: function (n, t, i) {
                    return n = f(n), t = a(t) ? t : s(t) ? t.join(" ") : "", r(n, function (n) {
                        uu(n, t)
                    }), e(n, i), u()
                }, setClass: function (n, t, i, r) {
                    var o = this, e = !1, u;
                    return n = f(n), u = n.data("$$animateClasses"), u ? r && u.options && (u.options = nt.extend(u.options || {}, r)) : (u = {
                            classes: {},
                            options: r
                        }, e = !0), r = u.classes, t = s(t) ? t : t.split(" "), i = s(i) ? i : i.split(" "), c(r, t, !0), c(r, i, !1), e && (u.promise = v(function (t) {
                        var r = n.data("$$animateClasses"), i;
                        n.removeData("$$animateClasses");
                        r && (i = y(n, r.classes), i && o.$$setClassImmediately(n, i[0], i[1], r.options));
                        t()
                    }), n.data("$$animateClasses", u)), u.promise
                }, $$setClassImmediately: function (n, t, i, r) {
                    return t && this.$$addClassImmediately(n, t), i && this.$$removeClassImmediately(n, i), e(n, r), u()
                }, enabled: h, cancel: h
            }
        }]
    }], et = v("$compile");
    de.$inject = ["$provide", "$$sanitizeUriProvider"];
    var ls = /^((?:x|data)[\:\-_])/i, ka = v("$controller"), as = "application/json", kf = {"Content-Type": as + ";charset=utf-8"}, da = /^\[|^\{(?!\{)/, ga = {
        "[": /]$/,
        "{": /}$/
    }, nv = /^\)\]\}',?\n/, df = v("$interpolate"), tv = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/, iv = {
        http: 80,
        https: 443,
        ftp: 21
    }, wu = v("$location"), rv = {
        $$html5: !1, $$replace: !1, absUrl: su("$$absUrl"), url: function (n) {
            if (e(n))return this.$$url;
            var t = tv.exec(n);
            return (t[1] || "" === n) && this.path(decodeURIComponent(t[1])), (t[2] || t[1] || "" === n) && this.search(t[3] || ""), this.hash(t[5] || ""), this
        }, protocol: su("$$protocol"), host: su("$$host"), port: su("$$port"), path: oo("$$path", function (n) {
            return n = null !== n ? n.toString() : "", "/" == n.charAt(0) ? n : "/" + n
        }), search: function (n, t) {
            switch (arguments.length) {
                case 0:
                    return this.$$search;
                case 1:
                    if (a(n) || b(n)) n = n.toString(), this.$$search = oe(n); else if (c(n)) n = ni(n, {}), r(n, function (t, i) {
                        null == t && delete n[i]
                    }), this.$$search = n; else throw wu("isrcharg");
                    break;
                default:
                    e(t) || null === t ? delete this.$$search[n] : this.$$search[n] = t
            }
            return this.$$compose(), this
        }, hash: oo("$$hash", function (n) {
            return null !== n ? n.toString() : ""
        }), replace: function () {
            return this.$$replace = !0, this
        }
    };
    r([eo, sf, of], function (n) {
        n.prototype = Object.create(rv);
        n.prototype.state = function (t) {
            if (!arguments.length)return this.$$state;
            if (n !== of || !this.$$html5)throw wu("nostate");
            return this.$$state = e(t) ? null : t, this
        }
    });
    var ot = v("$parse"), uv = Function.prototype.call, fv = Function.prototype.apply, ev = Function.prototype.bind, ar = rt();
    r({
        "null": function () {
            return null
        }, "true": function () {
            return !0
        }, "false": function () {
            return !1
        }, undefined: function () {
        }
    }, function (n, t) {
        n.constant = n.literal = n.sharedGetter = !0;
        ar[t] = n
    });
    ar["this"] = function (n) {
        return n
    };
    ar["this"].sharedGetter = !0;
    var vr = l(rt(), {
        "+": function (n, t, r, f) {
            return r = r(n, t), f = f(n, t), u(r) ? u(f) ? r + f : r : u(f) ? f : i
        }, "-": function (n, t, i, r) {
            return i = i(n, t), r = r(n, t), (u(i) ? i : 0) - (u(r) ? r : 0)
        }, "*": function (n, t, i, r) {
            return i(n, t) * r(n, t)
        }, "/": function (n, t, i, r) {
            return i(n, t) / r(n, t)
        }, "%": function (n, t, i, r) {
            return i(n, t) % r(n, t)
        }, "===": function (n, t, i, r) {
            return i(n, t) === r(n, t)
        }, "!==": function (n, t, i, r) {
            return i(n, t) !== r(n, t)
        }, "==": function (n, t, i, r) {
            return i(n, t) == r(n, t)
        }, "!=": function (n, t, i, r) {
            return i(n, t) != r(n, t)
        }, "<": function (n, t, i, r) {
            return i(n, t) < r(n, t)
        }, ">": function (n, t, i, r) {
            return i(n, t) > r(n, t)
        }, "<=": function (n, t, i, r) {
            return i(n, t) <= r(n, t)
        }, ">=": function (n, t, i, r) {
            return i(n, t) >= r(n, t)
        }, "&&": function (n, t, i, r) {
            return i(n, t) && r(n, t)
        }, "||": function (n, t, i, r) {
            return i(n, t) || r(n, t)
        }, "!": function (n, t, i) {
            return !i(n, t)
        }, "=": !0, "|": !0
    }), ov = {n: "\n", f: "\f", r: "\r", t: "\t", v: "\v", "'": "'", '"': '"'}, gf = function (n) {
        this.options = n
    };
    gf.prototype = {
        constructor: gf, lex: function (n) {
            for (this.text = n, this.index = 0, this.tokens = []; this.index < this.text.length;)if (n = this.text.charAt(this.index), '"' === n || "'" === n) this.readString(n); else if (this.isNumber(n) || "." === n && this.isNumber(this.peek())) this.readNumber(); else if (this.isIdent(n)) this.readIdent(); else if (this.is(n, "(){}[].,;:?")) this.tokens.push({
                index: this.index,
                text: n
            }), this.index++; else if (this.isWhitespace(n)) this.index++; else {
                var t = n + this.peek(), i = t + this.peek(2), r = vr[t], u = vr[i];
                vr[n] || r || u ? (n = u ? i : r ? t : n, this.tokens.push({
                        index: this.index,
                        text: n,
                        operator: !0
                    }), this.index += n.length) : this.throwError("Unexpected next character ", this.index, this.index + 1)
            }
            return this.tokens
        }, is: function (n, t) {
            return -1 !== t.indexOf(n)
        }, peek: function (n) {
            return n = n || 1, this.index + n < this.text.length ? this.text.charAt(this.index + n) : !1
        }, isNumber: function (n) {
            return "0" <= n && "9" >= n && "string" == typeof n
        }, isWhitespace: function (n) {
            return " " === n || "\r" === n || "\t" === n || "\n" === n || "\v" === n || " " === n
        }, isIdent: function (n) {
            return "a" <= n && "z" >= n || "A" <= n && "Z" >= n || "_" === n || "$" === n
        }, isExpOperator: function (n) {
            return "-" === n || "+" === n || this.isNumber(n)
        }, throwError: function (n, t, i) {
            i = i || this.index;
            t = u(t) ? "s " + t + "-" + this.index + " [" + this.text.substring(t, i) + "]" : " " + i;
            throw ot("lexerr", n, t, this.text);
        }, readNumber: function () {
            for (var t, i, n = "", r = this.index; this.index < this.text.length;) {
                if (t = y(this.text.charAt(this.index)), "." == t || this.isNumber(t)) n += t; else if (i = this.peek(), "e" == t && this.isExpOperator(i)) n += t; else if (this.isExpOperator(t) && i && this.isNumber(i) && "e" == n.charAt(n.length - 1)) n += t; else if (!this.isExpOperator(t) || i && this.isNumber(i) || "e" != n.charAt(n.length - 1))break; else this.throwError("Invalid exponent");
                this.index++
            }
            this.tokens.push({index: r, text: n, constant: !0, value: Number(n)})
        }, readIdent: function () {
            for (var t, n = this.index; this.index < this.text.length;) {
                if (t = this.text.charAt(this.index), !this.isIdent(t) && !this.isNumber(t))break;
                this.index++
            }
            this.tokens.push({index: n, text: this.text.slice(n, this.index), identifier: !0})
        }, readString: function (n) {
            var f = this.index, t, u;
            this.index++;
            for (var r = "", u = n, i = !1; this.index < this.text.length;) {
                if (t = this.text.charAt(this.index), u = u + t, i) "u" === t ? (i = this.text.substring(this.index + 1, this.index + 5), i.match(/[\da-f]{4}/i) || this.throwError("Invalid unicode escape [\\u" + i + "]"), this.index += 4, r += String.fromCharCode(parseInt(i, 16))) : r += ov[t] || t, i = !1; else if ("\\" === t) i = !0; else {
                    if (t === n) {
                        this.index++;
                        this.tokens.push({index: f, text: u, constant: !0, value: r});
                        return
                    }
                    r += t
                }
                this.index++
            }
            this.throwError("Unterminated quote", f)
        }
    };
    vi = function (n, t, i) {
        this.lexer = n;
        this.$filter = t;
        this.options = i
    };
    vi.ZERO = l(function () {
        return 0
    }, {sharedGetter: !0, constant: !0});
    vi.prototype = {
        constructor: vi, parse: function (n) {
            return this.text = n, this.tokens = this.lexer.lex(n), n = this.statements(), 0 !== this.tokens.length && this.throwError("is an unexpected token", this.tokens[0]), n.literal = !!n.literal, n.constant = !!n.constant, n
        }, primary: function () {
            var n, t, i;
            for (this.expect("(") ? (n = this.filterChain(), this.consume(")")) : this.expect("[") ? n = this.arrayDeclaration() : this.expect("{") ? n = this.object() : this.peek().identifier && (this.peek().text in ar) ? n = ar[this.consume().text] : this.peek().identifier ? n = this.identifier() : this.peek().constant ? n = this.constant() : this.throwError("not a primary expression", this.peek()); t = this.expect("(", "[", ".");)"(" === t.text ? (n = this.functionCall(n, i), i = null) : "[" === t.text ? (i = n, n = this.objectIndex(n)) : "." === t.text ? (i = n, n = this.fieldAccess(n)) : this.throwError("IMPOSSIBLE");
            return n
        }, throwError: function (n, t) {
            throw ot("syntax", t.text, n, t.index + 1, this.text, this.text.substring(t.index));
        }, peekToken: function () {
            if (0 === this.tokens.length)throw ot("ueoe", this.text);
            return this.tokens[0]
        }, peek: function (n, t, i, r) {
            return this.peekAhead(0, n, t, i, r)
        }, peekAhead: function (n, t, i, r, u) {
            if (this.tokens.length > n) {
                n = this.tokens[n];
                var f = n.text;
                if (f === t || f === i || f === r || f === u || !(t || i || r || u))return n
            }
            return !1
        }, expect: function (n, t, i, r) {
            return (n = this.peek(n, t, i, r)) ? (this.tokens.shift(), n) : !1
        }, consume: function (n) {
            if (0 === this.tokens.length)throw ot("ueoe", this.text);
            var t = this.expect(n);
            return t || this.throwError("is unexpected, expecting [" + n + "]", this.peek()), t
        }, unaryFn: function (n, t) {
            var i = vr[n];
            return l(function (n, r) {
                return i(n, r, t)
            }, {constant: t.constant, inputs: [t]})
        }, binaryFn: function (n, t, i, r) {
            var u = vr[t];
            return l(function (t, r) {
                return u(t, r, n, i)
            }, {constant: n.constant && i.constant, inputs: !r && [n, i]})
        }, identifier: function () {
            for (var n = this.consume().text; this.peek(".") && this.peekAhead(1).identifier && !this.peekAhead(2, "(");)n += this.consume().text + this.consume().text;
            return ul(n, this.options, this.text)
        }, constant: function () {
            var n = this.consume().value;
            return l(function () {
                return n
            }, {constant: !0, literal: !0})
        }, statements: function () {
            for (var n = []; ;)if (0 < this.tokens.length && !this.peek("}", ")", ";", "]") && n.push(this.filterChain()), !this.expect(";"))return 1 === n.length ? n[0] : function (t, i) {
                    for (var u, r = 0, f = n.length; r < f; r++)u = n[r](t, i);
                    return u
                }
        }, filterChain: function () {
            for (var n = this.expression(); this.expect("|");)n = this.filter(n);
            return n
        }, filter: function (n) {
            var u = this.$filter(this.consume().text), t, r, f;
            if (this.peek(":"))for (t = [], r = []; this.expect(":");)t.push(this.expression());
            return f = [n].concat(t || []), l(function (f, e) {
                var o = n(f, e);
                if (r) {
                    for (r[0] = o, o = t.length; o--;)r[o + 1] = t[o](f, e);
                    return u.apply(i, r)
                }
                return u(o)
            }, {constant: !u.$stateful && f.every(hf), inputs: !u.$stateful && f})
        }, expression: function () {
            return this.assignment()
        }, assignment: function () {
            var n = this.ternary(), t, i;
            return (i = this.expect("=")) ? (n.assign || this.throwError("implies assignment but [" + this.text.substring(0, i.index) + "] can not be assigned to", i), t = this.ternary(), l(function (i, r) {
                    return n.assign(i, t(i, r), r)
                }, {inputs: [n, t]})) : n
        }, ternary: function () {
            var n = this.logicalOR(), t, i;
            return this.expect("?") && (t = this.assignment(), this.consume(":")) ? (i = this.assignment(), l(function (r, u) {
                    return n(r, u) ? t(r, u) : i(r, u)
                }, {constant: n.constant && t.constant && i.constant})) : n
        }, logicalOR: function () {
            for (var n = this.logicalAND(), t; t = this.expect("||");)n = this.binaryFn(n, t.text, this.logicalAND(), !0);
            return n
        }, logicalAND: function () {
            for (var n = this.equality(), t; t = this.expect("&&");)n = this.binaryFn(n, t.text, this.equality(), !0);
            return n
        }, equality: function () {
            for (var n = this.relational(), t; t = this.expect("==", "!=", "===", "!==");)n = this.binaryFn(n, t.text, this.relational());
            return n
        }, relational: function () {
            for (var n = this.additive(), t; t = this.expect("<", ">", "<=", ">=");)n = this.binaryFn(n, t.text, this.additive());
            return n
        }, additive: function () {
            for (var n = this.multiplicative(), t; t = this.expect("+", "-");)n = this.binaryFn(n, t.text, this.multiplicative());
            return n
        }, multiplicative: function () {
            for (var n = this.unary(), t; t = this.expect("*", "/", "%");)n = this.binaryFn(n, t.text, this.unary());
            return n
        }, unary: function () {
            var n;
            return this.expect("+") ? this.primary() : (n = this.expect("-")) ? this.binaryFn(vi.ZERO, n.text, this.unary()) : (n = this.expect("!")) ? this.unaryFn(n.text, this.unary()) : this.primary()
        }, fieldAccess: function (n) {
            var t = this.identifier();
            return l(function (r, u, f) {
                return r = f || n(r, u), null == r ? i : t(r)
            }, {
                assign: function (i, r, u) {
                    var f = n(i, u);
                    return f || n.assign(i, f = {}, u), t.assign(f, r)
                }
            })
        }, objectIndex: function (n) {
            var t = this.text, r = this.expression();
            return this.consume("]"), l(function (u, f) {
                var e = n(u, f), o = r(u, f);
                return at(o, t), e ? ut(e[o], t) : i
            }, {
                assign: function (i, u, f) {
                    var o = at(r(i, f), t), e = ut(n(i, f), t);
                    return e || n.assign(i, e = {}, f), e[o] = u
                }
            })
        }, functionCall: function (n, t) {
            var e = [], f, r;
            if (")" !== this.peekToken().text)do e.push(this.expression()); while (this.expect(","));
            return this.consume(")"), f = this.text, r = e.length ? [] : null, function (o, s) {
                var l = t ? t(o, s) : u(t) ? i : o, c = n(o, s, l) || h, a;
                if (r)for (a = e.length; a--;)r[a] = ut(e[a](o, s), f);
                if (ut(l, f), c) {
                    if (c.constructor === c)throw ot("isecfn", f);
                    if (c === uv || c === fv || c === ev)throw ot("isecff", f);
                }
                return l = c.apply ? c.apply(l, r) : c(r[0], r[1], r[2], r[3], r[4]), r && (r.length = 0), ut(l, f)
            }
        }, arrayDeclaration: function () {
            var n = [];
            if ("]" !== this.peekToken().text)do {
                if (this.peek("]"))break;
                n.push(this.expression())
            } while (this.expect(","));
            return this.consume("]"), l(function (t, i) {
                for (var u = [], r = 0, f = n.length; r < f; r++)u.push(n[r](t, i));
                return u
            }, {literal: !0, constant: n.every(hf), inputs: n})
        }, object: function () {
            var i = [], t = [], n;
            if ("}" !== this.peekToken().text)do {
                if (this.peek("}"))break;
                n = this.consume();
                n.constant ? i.push(n.value) : n.identifier ? i.push(n.text) : this.throwError("invalid key", n);
                this.consume(":");
                t.push(this.expression())
            } while (this.expect(","));
            return this.consume("}"), l(function (n, r) {
                for (var f = {}, u = 0, e = t.length; u < e; u++)f[i[u]] = t[u](n, r);
                return f
            }, {literal: !0, constant: t.every(hf), inputs: t})
        }
    };
    var sv = rt(), hv = rt(), cv = Object.prototype.valueOf, gt = v("$sce"), st = {
        HTML: "html",
        CSS: "css",
        URL: "url",
        RESOURCE_URL: "resourceUrl",
        JS: "js"
    }, et = v("$compile"), d = t.createElement("a"), vs = dt(n.location.href);
    ao.$inject = ["$provide"];
    vo.$inject = ["$locale"];
    yo.$inject = ["$locale"];
    var ys = ".", lv = {
        yyyy: k("FullYear", 4),
        yy: k("FullYear", 2, 0, !0),
        y: k("FullYear", 1),
        MMMM: cu("Month"),
        MMM: cu("Month", !0),
        MM: k("Month", 2, 1),
        M: k("Month", 1, 1),
        dd: k("Date", 2),
        d: k("Date", 1),
        HH: k("Hours", 2),
        H: k("Hours", 1),
        hh: k("Hours", 2, -12),
        h: k("Hours", 1, -12),
        mm: k("Minutes", 2),
        m: k("Minutes", 1),
        ss: k("Seconds", 2),
        s: k("Seconds", 1),
        sss: k("Milliseconds", 3),
        EEEE: cu("Day"),
        EEE: cu("Day", !0),
        a: function (n, t) {
            return 12 > n.getHours() ? t.AMPMS[0] : t.AMPMS[1]
        },
        Z: function (n) {
            return n = -1 * n.getTimezoneOffset(), (0 <= n ? "+" : "") + (hu(Math[0 < n ? "floor" : "ceil"](n / 60), 2) + hu(Math.abs(n % 60), 2))
        },
        ww: bo(2),
        w: bo(1)
    }, av = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/, vv = /^\-?\d+$/;
    ko.$inject = ["$locale"];
    ps = tt(y);
    ws = tt(au);
    go.$inject = ["$parse"];
    bs = tt({
        restrict: "E", compile: function (n, t) {
            if (!t.href && !t.xlinkHref && !t.name)return function (n, t) {
                if ("a" === t[0].nodeName.toLowerCase()) {
                    var i = "[object SVGAnimatedString]" === fi.call(t.prop("href")) ? "xlink:href" : "href";
                    t.on("click", function (n) {
                        t.attr(i) || n.preventDefault()
                    })
                }
            }
        }
    });
    yr = {};
    r(lr, function (n, t) {
        if ("multiple" != n) {
            var i = bt("ng-" + t);
            yr[i] = function () {
                return {
                    restrict: "A", priority: 100, link: function (n, r, u) {
                        n.$watch(u[i], function (n) {
                            u.$set(t, !!n)
                        })
                    }
                }
            }
        }
    });
    r(bf, function (n, t) {
        yr[t] = function () {
            return {
                priority: 100, link: function (n, i, r) {
                    if ("ngPattern" === t && "/" == r.ngPattern.charAt(0) && (i = r.ngPattern.match(ia))) {
                        r.$set("ngPattern", new RegExp(i[1], i[2]));
                        return
                    }
                    n.$watch(r[t], function (n) {
                        r.$set(t, n)
                    })
                }
            }
        }
    });
    r(["src", "srcset", "href"], function (n) {
        var t = bt("ng-" + n);
        yr[t] = function () {
            return {
                priority: 99, link: function (i, r, u) {
                    var e = n, f = n;
                    "href" === n && "[object SVGAnimatedString]" === fi.call(r.prop("href")) && (f = "xlinkHref", u.$attr[f] = "xlink:href", e = null);
                    u.$observe(t, function (t) {
                        t ? (u.$set(f, t), li && e && r.prop(e, u[f])) : "href" === n && u.$set(f, null)
                    })
                }
            }
        }
    });
    pr = {
        $addControl: h, $$renameControl: function (n, t) {
            n.$name = t
        }, $removeControl: h, $setValidity: h, $setDirty: h, $setPristine: h, $setSubmitted: h
    };
    ns.$inject = ["$element", "$attrs", "$scope", "$animate", "$interpolate"];
    var ks = function (n) {
        return ["$timeout", function (t) {
            return {
                name: "form", restrict: n ? "EAC" : "E", controller: ns, compile: function (n) {
                    return n.addClass(yi).addClass(wr), {
                        pre: function (n, r, u, f) {
                            var o, s, e;
                            if (!("action" in u)) {
                                o = function (t) {
                                    n.$apply(function () {
                                        f.$commitViewValue();
                                        f.$setSubmitted()
                                    });
                                    t.preventDefault()
                                };
                                r[0].addEventListener("submit", o, !1);
                                r.on("$destroy", function () {
                                    t(function () {
                                        r[0].removeEventListener("submit", o, !1)
                                    }, 0, !1)
                                })
                            }
                            s = f.$$parentForm;
                            e = f.$name;
                            e && (ur(n, null, e, f, e), u.$observe(u.name ? "name" : "ngForm", function (t) {
                                e !== t && (ur(n, null, e, i, e), e = t, ur(n, null, e, f, e), s.$$renameControl(f, e))
                            }));
                            r.on("$destroy", function () {
                                s.$removeControl(f);
                                e && ur(n, null, e, i, e);
                                l(f, pr)
                            })
                        }
                    }
                }
            }
        }]
    }, yv = ks(), pv = ks(!0), wv = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/, bv = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/, kv = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i, dv = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/, ds = /^(\d{4})-(\d{2})-(\d{2})$/, gs = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/, ne = /^(\d{4})-W(\d\d)$/, nh = /^(\d{4})-(\d\d)$/, th = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/, ih = {
        text: function (n, t, i, r, u, f) {
            fr(n, t, i, r, u, f);
            lf(r)
        },
        date: er("date", ds, lu(ds, ["yyyy", "MM", "dd"]), "yyyy-MM-dd"),
        "datetime-local": er("datetimelocal", gs, lu(gs, "yyyy MM dd HH mm ss sss".split(" ")), "yyyy-MM-ddTHH:mm:ss.sss"),
        time: er("time", th, lu(th, ["HH", "mm", "ss", "sss"]), "HH:mm:ss.sss"),
        week: er("week", ne, function (n, t) {
            var i;
            if (ct(n))return n;
            if (a(n) && (ne.lastIndex = 0, i = ne.exec(n), i)) {
                var u = +i[1], r = +i[2], f = i = 0, e = 0, o = 0, s = wo(u), r = 7 * (r - 1);
                return t && (i = t.getHours(), f = t.getMinutes(), e = t.getSeconds(), o = t.getMilliseconds()), new Date(u, 0, s.getDate() + r, i, f, e, o)
            }
            return NaN
        }, "yyyy-Www"),
        month: er("month", nh, lu(nh, ["yyyy", "MM"]), "yyyy-MM"),
        number: function (n, t, r, f, o, s) {
            var h, c;
            ts(n, t, r, f);
            fr(n, t, r, f, o, s);
            f.$$parserName = "number";
            f.$parsers.push(function (n) {
                return f.$isEmpty(n) ? null : dv.test(n) ? parseFloat(n) : i
            });
            f.$formatters.push(function (n) {
                if (!f.$isEmpty(n)) {
                    if (!b(n))throw ku("numfmt", n);
                    n = n.toString()
                }
                return n
            });
            (u(r.min) || r.ngMin) && (f.$validators.min = function (n) {
                return f.$isEmpty(n) || e(h) || n >= h
            }, r.$observe("min", function (n) {
                u(n) && !b(n) && (n = parseFloat(n, 10));
                h = b(n) && !isNaN(n) ? n : i;
                f.$validate()
            }));
            (u(r.max) || r.ngMax) && (f.$validators.max = function (n) {
                return f.$isEmpty(n) || e(c) || n <= c
            }, r.$observe("max", function (n) {
                u(n) && !b(n) && (n = parseFloat(n, 10));
                c = b(n) && !isNaN(n) ? n : i;
                f.$validate()
            }))
        },
        url: function (n, t, i, r, u, f) {
            fr(n, t, i, r, u, f);
            lf(r);
            r.$$parserName = "url";
            r.$validators.url = function (n, t) {
                var i = n || t;
                return r.$isEmpty(i) || bv.test(i)
            }
        },
        email: function (n, t, i, r, u, f) {
            fr(n, t, i, r, u, f);
            lf(r);
            r.$$parserName = "email";
            r.$validators.email = function (n, t) {
                var i = n || t;
                return r.$isEmpty(i) || kv.test(i)
            }
        },
        radio: function (n, t, i, r) {
            e(i.name) && t.attr("name", ++vu);
            t.on("click", function (n) {
                t[0].checked && r.$setViewValue(i.value, n && n.type)
            });
            r.$render = function () {
                t[0].checked = i.value == r.$viewValue
            };
            i.$observe("value", r.$render)
        },
        checkbox: function (n, t, i, r, u, f, e, o) {
            var s = is(o, n, "ngTrueValue", i.ngTrueValue, !0), h = is(o, n, "ngFalseValue", i.ngFalseValue, !1);
            t.on("click", function (n) {
                r.$setViewValue(t[0].checked, n && n.type)
            });
            r.$render = function () {
                t[0].checked = r.$viewValue
            };
            r.$isEmpty = function (n) {
                return !1 === n
            };
            r.$formatters.push(function (n) {
                return it(n, s)
            });
            r.$parsers.push(function (n) {
                return n ? s : h
            })
        },
        hidden: h,
        button: h,
        submit: h,
        reset: h,
        file: h
    }, rh = ["$browser", "$sniffer", "$filter", "$parse", function (n, t, i, r) {
        return {
            restrict: "E", require: ["?ngModel"], link: {
                pre: function (u, f, e, o) {
                    o[0] && (ih[y(e.type)] || ih.text)(u, f, e, o[0], t, n, i, r)
                }
            }
        }
    }], gv = /^(true|false|\d+)$/, ny = function () {
        return {
            restrict: "A", priority: 100, compile: function (n, t) {
                return gv.test(t.ngValue) ? function (n, t, i) {
                        i.$set("value", n.$eval(i.ngValue))
                    } : function (n, t, i) {
                        n.$watch(i.ngValue, function (n) {
                            i.$set("value", n)
                        })
                    }
            }
        }
    }, ty = ["$compile", function (n) {
        return {
            restrict: "AC", compile: function (t) {
                return n.$$addBindingClass(t), function (t, r, u) {
                    n.$$addBindingInfo(r, u.ngBind);
                    r = r[0];
                    t.$watch(u.ngBind, function (n) {
                        r.textContent = n === i ? "" : n
                    })
                }
            }
        }
    }], iy = ["$interpolate", "$compile", function (n, t) {
        return {
            compile: function (r) {
                return t.$$addBindingClass(r), function (r, u, f) {
                    r = n(u.attr(f.$attr.ngBindTemplate));
                    t.$$addBindingInfo(u, r.expressions);
                    u = u[0];
                    f.$observe("ngBindTemplate", function (n) {
                        u.textContent = n === i ? "" : n
                    })
                }
            }
        }
    }], ry = ["$sce", "$parse", "$compile", function (n, t, i) {
        return {
            restrict: "A", compile: function (r, u) {
                var f = t(u.ngBindHtml), e = t(u.ngBindHtml, function (n) {
                    return (n || "").toString()
                });
                return i.$$addBindingClass(r), function (t, r, u) {
                    i.$$addBindingInfo(r, u.ngBindHtml);
                    t.$watch(e, function () {
                        r.html(n.getTrustedHtml(f(t)) || "")
                    })
                }
            }
        }
    }], uy = tt({
        restrict: "A", require: "ngModel", link: function (n, t, i, r) {
            r.$viewChangeListeners.push(function () {
                n.$eval(i.ngChange)
            })
        }
    }), fy = af("", !0), ey = af("Odd", 0), oy = af("Even", 1), sy = ui({
        compile: function (n, t) {
            t.$set("ngCloak", i);
            n.removeClass("ng-cloak")
        }
    }), hy = [function () {
        return {restrict: "A", scope: !0, controller: "@", priority: 500}
    }], uh = {}, cy = {blur: !0, focus: !0};
    r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), function (n) {
        var t = bt("ng-" + n);
        uh[t] = ["$parse", "$rootScope", function (i, r) {
            return {
                restrict: "A", compile: function (u, f) {
                    var e = i(f[t], null, !0);
                    return function (t, i) {
                        i.on(n, function (i) {
                            var u = function () {
                                e(t, {$event: i})
                            };
                            cy[n] && r.$$phase ? t.$evalAsync(u) : t.$apply(u)
                        })
                    }
                }
            }
        }]
    });
    var ly = ["$animate", function (n) {
        return {
            multiElement: !0,
            transclude: "element",
            priority: 600,
            terminal: !0,
            restrict: "A",
            $$tlb: !0,
            link: function (i, r, u, f, e) {
                var h, s, o;
                i.$watch(u.ngIf, function (i) {
                    i ? s || e(function (i, f) {
                            s = f;
                            i[i.length++] = t.createComment(" end ngIf: " + u.ngIf + " ");
                            h = {clone: i};
                            n.enter(i, r.parent(), r)
                        }) : (o && (o.remove(), o = null), s && (s.$destroy(), s = null), h && (o = gr(h.clone), n.leave(o).then(function () {
                            o = null
                        }), h = null))
                })
            }
        }
    }], ay = ["$templateRequest", "$anchorScroll", "$animate", "$sce", function (n, t, i, r) {
        return {
            restrict: "ECA",
            priority: 400,
            terminal: !0,
            transclude: "element",
            controller: nt.noop,
            compile: function (f, e) {
                var s = e.ngInclude || e.src, h = e.onload || "", o = e.autoscroll;
                return function (f, e, c, l, a) {
                    var w = 0, v, y, p, b = function () {
                        y && (y.remove(), y = null);
                        v && (v.$destroy(), v = null);
                        p && (i.leave(p).then(function () {
                            y = null
                        }), y = p, p = null)
                    };
                    f.$watch(r.parseAsResourceUrl(s), function (r) {
                        var c = function () {
                            u(o) && (!o || f.$eval(o)) && t()
                        }, s = ++w;
                        r ? (n(r, !0).then(function (n) {
                                if (s === w) {
                                    var t = f.$new();
                                    l.template = n;
                                    n = a(t, function (n) {
                                        b();
                                        i.enter(n, null, e).then(c)
                                    });
                                    v = t;
                                    p = n;
                                    v.$emit("$includeContentLoaded", r);
                                    f.$eval(h)
                                }
                            }, function () {
                                s === w && (b(), f.$emit("$includeContentError", r))
                            }), f.$emit("$includeContentRequested", r)) : (b(), l.template = null)
                    })
                }
            }
        }
    }], vy = ["$compile", function (n) {
        return {
            restrict: "ECA", priority: -400, require: "ngInclude", link: function (i, r, u, f) {
                /SVG/.test(r[0].toString()) ? (r.empty(), n(ae(f.template, t).childNodes)(i, function (n) {
                        r.append(n)
                    }, {futureParentElement: r})) : (r.html(f.template), n(r.contents())(i))
            }
        }
    }], yy = ui({
        priority: 450, compile: function () {
            return {
                pre: function (n, t, i) {
                    n.$eval(i.ngInit)
                }
            }
        }
    }), py = function () {
        return {
            restrict: "A", priority: 100, require: "ngModel", link: function (n, t, u, f) {
                var o = t.attr(u.$attr.ngList) || ", ", h = "false" !== u.ngTrim, c = h ? p(o) : o;
                f.$parsers.push(function (n) {
                    if (!e(n)) {
                        var t = [];
                        return n && r(n.split(c), function (n) {
                            n && t.push(h ? p(n) : n)
                        }), t
                    }
                });
                f.$formatters.push(function (n) {
                    return s(n) ? n.join(o) : i
                });
                f.$isEmpty = function (n) {
                    return !n || !n.length
                }
            }
        }
    }, wr = "ng-valid", fh = "ng-invalid", yi = "ng-pristine", bu = "ng-dirty", eh = "ng-pending", ku = new v("ngModel"), wy = ["$scope", "$exceptionHandler", "$attrs", "$element", "$parse", "$animate", "$timeout", "$rootScope", "$q", "$interpolate", function (n, t, f, s, c, l, a, v, y, p) {
        var it, g;
        this.$modelValue = this.$viewValue = Number.NaN;
        this.$$rawModelValue = i;
        this.$validators = {};
        this.$asyncValidators = {};
        this.$parsers = [];
        this.$formatters = [];
        this.$viewChangeListeners = [];
        this.$untouched = !0;
        this.$touched = !1;
        this.$pristine = !0;
        this.$dirty = !1;
        this.$valid = !0;
        this.$invalid = !1;
        this.$error = {};
        this.$$success = {};
        this.$pending = i;
        this.$name = p(f.name || "", !1)(n);
        var d = c(f.ngModel), rt = d.assign, tt = d, ut = rt, nt = null, k, w = this;
        this.$$setOptions = function (n) {
            if ((w.$options = n) && n.getterSetter) {
                var t = c(f.ngModel + "()"), i = c(f.ngModel + "($$$p)");
                tt = function (n) {
                    var i = d(n);
                    return o(i) && (i = t(n)), i
                };
                ut = function (n) {
                    o(d(n)) ? i(n, {$$$p: w.$modelValue}) : rt(n, w.$modelValue)
                }
            } else if (!d.assign)throw ku("nonassign", f.ngModel, wt(s));
        };
        this.$render = h;
        this.$isEmpty = function (n) {
            return e(n) || "" === n || null === n || n !== n
        };
        it = s.inheritedData("$formController") || pr;
        g = 0;
        rs({
            ctrl: this, $element: s, set: function (n, t) {
                n[t] = !0
            }, unset: function (n, t) {
                delete n[t]
            }, parentForm: it, $animate: l
        });
        this.$setPristine = function () {
            w.$dirty = !1;
            w.$pristine = !0;
            l.removeClass(s, bu);
            l.addClass(s, yi)
        };
        this.$setDirty = function () {
            w.$dirty = !0;
            w.$pristine = !1;
            l.removeClass(s, yi);
            l.addClass(s, bu);
            it.$setDirty()
        };
        this.$setUntouched = function () {
            w.$touched = !1;
            w.$untouched = !0;
            l.setClass(s, "ng-untouched", "ng-touched")
        };
        this.$setTouched = function () {
            w.$touched = !0;
            w.$untouched = !1;
            l.setClass(s, "ng-touched", "ng-untouched")
        };
        this.$rollbackViewValue = function () {
            a.cancel(nt);
            w.$viewValue = w.$$lastCommittedViewValue;
            w.$render()
        };
        this.$validate = function () {
            if (!b(w.$modelValue) || !isNaN(w.$modelValue)) {
                var n = w.$$rawModelValue, t = w.$valid, r = w.$modelValue, u = w.$options && w.$options.allowInvalid;
                w.$$runValidators(n, w.$$lastCommittedViewValue, function (f) {
                    u || t === f || (w.$modelValue = f ? n : i, w.$modelValue !== r && w.$$writeModelToScope())
                })
            }
        };
        this.$$runValidators = function (n, t, u) {
            function c() {
                var i = !0;
                return r(w.$validators, function (r, u) {
                    var e = r(n, t);
                    i = i && e;
                    f(u, e)
                }), i ? !0 : (r(w.$asyncValidators, function (n, t) {
                        f(t, null)
                    }), !1)
            }

            function l() {
                var u = [], s = !0;
                r(w.$asyncValidators, function (r, e) {
                    var h = r(n, t);
                    if (!h || !o(h.then))throw ku("$asyncValidators", h);
                    f(e, i);
                    u.push(h.then(function () {
                        f(e, !0)
                    }, function () {
                        s = !1;
                        f(e, !1)
                    }))
                });
                u.length ? y.all(u).then(function () {
                        e(s)
                    }, h) : e(!0)
            }

            function f(n, t) {
                s === g && w.$setValidity(n, t)
            }

            function e(n) {
                s === g && u(n)
            }

            g++;
            var s = g;
            (function () {
                var n = w.$$parserName || "parse";
                if (k === i) f(n, null); else return k || (r(w.$validators, function (n, t) {
                    f(t, null)
                }), r(w.$asyncValidators, function (n, t) {
                    f(t, null)
                })), f(n, k), k;
                return !0
            })() ? c() ? l() : e(!1) : e(!1)
        };
        this.$commitViewValue = function () {
            var n = w.$viewValue;
            a.cancel(nt);
            (w.$$lastCommittedViewValue !== n || "" === n && w.$$hasNativeValidators) && (w.$$lastCommittedViewValue = n, w.$pristine && this.$setDirty(), this.$$parseAndValidate())
        };
        this.$$parseAndValidate = function () {
            var t = w.$$lastCommittedViewValue, r, u, f;
            if (k = e(t) ? i : !0)for (r = 0; r < w.$parsers.length; r++)if (t = w.$parsers[r](t), e(t)) {
                k = !1;
                break
            }
            b(w.$modelValue) && isNaN(w.$modelValue) && (w.$modelValue = tt(n));
            u = w.$modelValue;
            f = w.$options && w.$options.allowInvalid;
            w.$$rawModelValue = t;
            f && (w.$modelValue = t, w.$modelValue !== u && w.$$writeModelToScope());
            w.$$runValidators(t, w.$$lastCommittedViewValue, function (n) {
                f || (w.$modelValue = n ? t : i, w.$modelValue !== u && w.$$writeModelToScope())
            })
        };
        this.$$writeModelToScope = function () {
            ut(n, w.$modelValue);
            r(w.$viewChangeListeners, function (n) {
                try {
                    n()
                } catch (i) {
                    t(i)
                }
            })
        };
        this.$setViewValue = function (n, t) {
            w.$viewValue = n;
            w.$options && !w.$options.updateOnDefault || w.$$debounceViewValueCommit(t)
        };
        this.$$debounceViewValueCommit = function (t) {
            var r = 0, i = w.$options;
            i && u(i.debounce) && (i = i.debounce, b(i) ? r = i : b(i[t]) ? r = i[t] : b(i["default"]) && (r = i["default"]));
            a.cancel(nt);
            r ? nt = a(function () {
                    w.$commitViewValue()
                }, r) : v.$$phase ? w.$commitViewValue() : n.$apply(function () {
                        w.$commitViewValue()
                    })
        };
        n.$watch(function () {
            var t = tt(n);
            if (t !== w.$modelValue) {
                w.$modelValue = w.$$rawModelValue = t;
                k = i;
                for (var u = w.$formatters, f = u.length, r = t; f--;)r = u[f](r);
                w.$viewValue !== r && (w.$viewValue = w.$$lastCommittedViewValue = r, w.$render(), w.$$runValidators(t, r, h))
            }
            return t
        })
    }], by = ["$rootScope", function (n) {
        return {
            restrict: "A",
            require: ["ngModel", "^?form", "^?ngModelOptions"],
            controller: wy,
            priority: 1,
            compile: function (t) {
                return t.addClass(yi).addClass("ng-untouched").addClass(wr), {
                    pre: function (n, t, i, r) {
                        var u = r[0], f = r[1] || pr;
                        u.$$setOptions(r[2] && r[2].$options);
                        f.$addControl(u);
                        i.$observe("name", function (n) {
                            u.$name !== n && f.$$renameControl(u, n)
                        });
                        n.$on("$destroy", function () {
                            f.$removeControl(u)
                        })
                    }, post: function (t, i, r, u) {
                        var f = u[0];
                        if (f.$options && f.$options.updateOn) i.on(f.$options.updateOn, function (n) {
                            f.$$debounceViewValueCommit(n && n.type)
                        });
                        i.on("blur", function () {
                            f.$touched || (n.$$phase ? t.$evalAsync(f.$setTouched) : t.$apply(f.$setTouched))
                        })
                    }
                }
            }
        }
    }], ky = /(\s+|^)default(\s+|$)/, dy = function () {
        return {
            restrict: "A", controller: ["$scope", "$attrs", function (n, t) {
                var r = this;
                this.$options = n.$eval(t.ngModelOptions);
                this.$options.updateOn !== i ? (this.$options.updateOnDefault = !1, this.$options.updateOn = p(this.$options.updateOn.replace(ky, function () {
                        return r.$options.updateOnDefault = !0, " "
                    }))) : this.$options.updateOnDefault = !0
            }]
        }
    }, gy = ui({terminal: !0, priority: 1e3}), np = ["$locale", "$interpolate", function (n, t) {
        var i = /{}/g, u = /^when(Minus)?(.+)$/;
        return {
            restrict: "EA", link: function (f, e, o) {
                function w(n) {
                    e.text(n || "")
                }

                var l = o.count, s = o.$attr.when && e.attr(o.$attr.when), a = o.offset || 0, h = f.$eval(s) || {}, v = {}, s = t.startSymbol(), b = t.endSymbol(), k = s + l + "-" + a + b, p = nt.noop, c;
                r(o, function (n, t) {
                    var i = u.exec(t);
                    i && (i = (i[1] ? "-" : "") + y(i[2]), h[i] = e.attr(o.$attr[t]))
                });
                r(h, function (n, r) {
                    v[r] = t(n.replace(i, k))
                });
                f.$watch(l, function (t) {
                    t = parseFloat(t);
                    var i = isNaN(t);
                    i || t in h || (t = n.pluralCat(t - a));
                    t === c || i && isNaN(c) || (p(), p = f.$watch(v[t], w), c = t)
                })
            }
        }
    }], tp = ["$parse", "$animate", function (n, u) {
        var e = v("ngRepeat"), o = function (n, t, i, r, u, f, e) {
            n[i] = r;
            u && (n[u] = f);
            n.$index = t;
            n.$first = 0 === t;
            n.$last = t === e - 1;
            n.$middle = !(n.$first || n.$last);
            n.$odd = !(n.$even = 0 == (t & 1))
        };
        return {
            restrict: "A",
            multiElement: !0,
            transclude: "element",
            priority: 1e3,
            terminal: !0,
            $$tlb: !0,
            compile: function (s, h) {
                var y = h.ngRepeat, tt = t.createComment(" end ngRepeat: " + y + " "), c = y.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/), p, a, w, b, g, nt, v;
                if (!c)throw e("iexp", y);
                var k = c[1], it = c[2], l = c[3], d = c[4], c = k.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);
                if (!c)throw e("iidexp", k);
                if (p = c[3] || c[1], a = c[2], l && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(l) || /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(l)))throw e("badident", l);
                return v = {$id: hi}, d ? w = n(d) : (g = function (n, t) {
                        return hi(t)
                    }, nt = function (n) {
                        return n
                    }), function (n, t, s, h, c) {
                    w && (b = function (t, i, r) {
                        return a && (v[a] = t), v[p] = i, v.$index = r, w(n, v)
                    });
                    var k = rt();
                    n.$watchCollection(it, function (s) {
                        var h, st, ht = t[0], ut, ct = rt(), et, ft, ot, w, d, v, it;
                        if (l && (n[l] = s), pi(s)) d = s, st = b || g; else {
                            st = b || nt;
                            d = [];
                            for (it in s)s.hasOwnProperty(it) && "$" != it.charAt(0) && d.push(it);
                            d.sort()
                        }
                        for (et = d.length, it = Array(et), h = 0; h < et; h++)if (ft = s === d ? h : d[h], ot = s[ft], w = st(ft, ot, h), k[w]) v = k[w], delete k[w], ct[w] = v, it[h] = v; else {
                            if (ct[w])throw r(it, function (n) {
                                n && n.scope && (k[n.id] = n)
                            }), e("dupes", y, w, ot);
                            it[h] = {id: w, scope: i, clone: i};
                            ct[w] = !0
                        }
                        for (ut in k) {
                            if (v = k[ut], w = gr(v.clone), u.leave(w), w[0].parentNode)for (h = 0, st = w.length; h < st; h++)w[h].$$NG_REMOVED = !0;
                            v.scope.$destroy()
                        }
                        for (h = 0; h < et; h++)if (ft = s === d ? h : d[h], ot = s[ft], v = it[h], v.scope) {
                            ut = ht;
                            do ut = ut.nextSibling; while (ut && ut.$$NG_REMOVED);
                            v.clone[0] != ut && u.move(gr(v.clone), null, f(ht));
                            ht = v.clone[v.clone.length - 1];
                            o(v.scope, h, p, ot, a, ft, et)
                        } else c(function (n, t) {
                            v.scope = t;
                            var i = tt.cloneNode(!1);
                            n[n.length++] = i;
                            u.enter(n, null, f(ht));
                            ht = i;
                            v.clone = n;
                            ct[v.id] = v;
                            o(v.scope, h, p, ot, a, ft, et)
                        });
                        k = ct
                    })
                }
            }
        }
    }], ip = ["$animate", function (n) {
        return {
            restrict: "A", multiElement: !0, link: function (t, i, r) {
                t.$watch(r.ngShow, function (t) {
                    n[t ? "removeClass" : "addClass"](i, "ng-hide", {tempClasses: "ng-hide-animate"})
                })
            }
        }
    }], rp = ["$animate", function (n) {
        return {
            restrict: "A", multiElement: !0, link: function (t, i, r) {
                t.$watch(r.ngHide, function (t) {
                    n[t ? "addClass" : "removeClass"](i, "ng-hide", {tempClasses: "ng-hide-animate"})
                })
            }
        }
    }], up = ui(function (n, t, i) {
        n.$watchCollection(i.ngStyle, function (n, i) {
            i && n !== i && r(i, function (n, i) {
                t.css(i, "")
            });
            n && t.css(n)
        })
    }), fp = ["$animate", function (n) {
        return {
            restrict: "EA", require: "ngSwitch", controller: ["$scope", function () {
                this.cases = {}
            }], link: function (i, u, f, e) {
                var c = [], h = [], o = [], s = [], l = function (n, t) {
                    return function () {
                        n.splice(t, 1)
                    }
                };
                i.$watch(f.ngSwitch || f.on, function (i) {
                    for (var a, u = 0, f = o.length; u < f; ++u)n.cancel(o[u]);
                    for (u = o.length = 0, f = s.length; u < f; ++u)a = gr(h[u].clone), s[u].$destroy(), (o[u] = n.leave(a)).then(l(o, u));
                    h.length = 0;
                    s.length = 0;
                    (c = e.cases["!" + i] || e.cases["?"]) && r(c, function (i) {
                        i.transclude(function (r, u) {
                            s.push(u);
                            var f = i.element;
                            r[r.length++] = t.createComment(" end ngSwitchWhen: ");
                            h.push({clone: r});
                            n.enter(r, f.parent(), f)
                        })
                    })
                })
            }
        }
    }], ep = ui({
        transclude: "element",
        priority: 1200,
        require: "^ngSwitch",
        multiElement: !0,
        link: function (n, t, i, r, u) {
            r.cases["!" + i.ngSwitchWhen] = r.cases["!" + i.ngSwitchWhen] || [];
            r.cases["!" + i.ngSwitchWhen].push({transclude: u, element: t})
        }
    }), op = ui({
        transclude: "element",
        priority: 1200,
        require: "^ngSwitch",
        multiElement: !0,
        link: function (n, t, i, r, u) {
            r.cases["?"] = r.cases["?"] || [];
            r.cases["?"].push({transclude: u, element: t})
        }
    }), sp = ui({
        restrict: "EAC", link: function (n, t, i, r, u) {
            if (!u)throw v("ngTransclude")("orphan", wt(t));
            u(function (n) {
                t.empty();
                t.append(n)
            })
        }
    }), hp = ["$templateCache", function (n) {
        return {
            restrict: "E", terminal: !0, compile: function (t, i) {
                "text/ng-template" == i.type && n.put(i.id, t[0].text)
            }
        }
    }], cp = v("ngOptions"), lp = tt({restrict: "A", terminal: !0}), ap = ["$compile", "$parse", function (n, o) {
        var c = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/, l = {$setViewValue: h};
        return {
            restrict: "E",
            require: ["select", "?ngModel"],
            controller: ["$element", "$scope", "$attrs", function (n, t, i) {
                var r = this, f = {}, e = l, u;
                r.databound = i.ngModel;
                r.init = function (n, t, i) {
                    e = n;
                    u = i
                };
                r.addOption = function (t, i) {
                    si(t, '"option value"');
                    f[t] = !0;
                    e.$viewValue == t && (n.val(t), u.parent() && u.remove());
                    i && i[0].hasAttribute("selected") && (i[0].selected = !0)
                };
                r.removeOption = function (n) {
                    this.hasOption(n) && (delete f[n], e.$viewValue === n && this.renderUnknownOption(n))
                };
                r.renderUnknownOption = function (t) {
                    t = "? " + hi(t) + " ?";
                    u.val(t);
                    n.prepend(u);
                    n.val(t);
                    u.prop("selected", !0)
                };
                r.hasOption = function (n) {
                    return f.hasOwnProperty(n)
                };
                t.$on("$destroy", function () {
                    r.renderUnknownOption = h
                })
            }],
            link: function (h, l, a, v) {
                function ut(n, t, i, r) {
                    i.$render = function () {
                        var n = i.$viewValue;
                        r.hasOption(n) ? (b.parent() && b.remove(), t.val(n), "" === n && g.prop("selected", !0)) : e(n) && g ? t.val("") : r.renderUnknownOption(n)
                    };
                    t.on("change", function () {
                        n.$apply(function () {
                            b.parent() && b.remove();
                            i.$setViewValue(t.val())
                        })
                    })
                }

                function ft(n, t, i) {
                    var f;
                    i.$render = function () {
                        var n = new ir(i.$viewValue);
                        r(t.find("option"), function (t) {
                            t.selected = u(n.get(t.value))
                        })
                    };
                    n.$watch(function () {
                        it(f, i.$viewValue) || (f = lt(i.$viewValue), i.$render())
                    });
                    t.on("change", function () {
                        n.$apply(function () {
                            var n = [];
                            r(t.find("option"), function (t) {
                                t.selected && n.push(t.value)
                            });
                            i.$setViewValue(n)
                        })
                    })
                }

                function et(t, f, e) {
                    function a(n, i, r) {
                        return ut[ct] = r, k && (ut[k] = i), n(t, ut)
                    }

                    function at(n) {
                        var t, i;
                        if (p)if (l && s(n))for (t = new ir([]), i = 0; i < n.length; i++)t.put(a(l, null, n[i]), !0); else t = new ir(n); else l && (n = a(l, null, n));
                        return function (i, r) {
                            var f;
                            return f = l ? l : v ? v : ht, p ? u(t.remove(a(f, i, r))) : n === a(f, i, r)
                        }
                    }

                    function ft() {
                        nt || (t.$$postDigest(et), nt = !0)
                    }

                    function b(n, t, i) {
                        n[t] = n[t] || 0;
                        n[t] += i ? 1 : -1
                    }

                    function et() {
                        var ht, yt, n, v, d, c, h, ct, s, ft, pt, i, et, o, lt, wt;
                        for (nt = !1, ht = {"": []}, yt = [""], d = e.$viewValue, c = it(t) || [], ct = k ? Object.keys(c).sort() : c, et = {}, h = at(d), o = !1, rt = {}, i = 0; pt = ct.length, i < pt; i++)(s = i, k && (s = ct[i], "$" === s.charAt(0))) || (ft = c[s], n = a(vt, s, ft) || "", (v = ht[n]) || (v = ht[n] = [], yt.push(n)), n = h(s, ft), o = o || n, ft = a(st, s, ft), ft = u(ft) ? ft : "", wt = l ? l(t, ut) : k ? ct[i] : i, l && (rt[wt] = s), v.push({
                            id: wt,
                            label: ft,
                            selected: n
                        }));
                        for (p || (y || null === d ? ht[""].unshift({
                                id: "",
                                label: "",
                                selected: !o
                            }) : o || ht[""].unshift({
                                id: "?",
                                label: "",
                                selected: !0
                            })), s = 0, ct = yt.length; s < ct; s++) {
                            for (n = yt[s], v = ht[n], g.length <= s ? (d = {
                                    element: ot.clone().attr("label", n),
                                    label: v.label
                                }, c = [d], g.push(c), f.append(d.element)) : (c = g[s], d = c[0], d.label != n && d.element.attr("label", d.label = n)), o = null, i = 0, pt = v.length; i < pt; i++)n = v[i], (h = c[i + 1]) ? (o = h.element, h.label !== n.label && (b(et, h.label, !1), b(et, n.label, !0), o.text(h.label = n.label), o.prop("label", h.label)), h.id !== n.id && o.val(h.id = n.id), o[0].selected !== n.selected && (o.prop("selected", h.selected = n.selected), li && o.prop("selected", h.selected))) : ("" === n.id && y ? lt = y : (lt = tt.clone()).val(n.id).prop("selected", n.selected).attr("selected", n.selected).prop("label", n.label).text(n.label), c.push(h = {
                                    element: lt,
                                    label: n.label,
                                    id: n.id,
                                    selected: n.selected
                                }), b(et, n.label, !0), o ? o.after(lt) : d.element.append(lt), o = lt);
                            for (i++; c.length > i;)n = c.pop(), b(et, n.label, !1), n.element.remove()
                        }
                        for (; g.length > s;) {
                            for (v = g.pop(), i = 1; i < v.length; ++i)b(et, v[i].label, !1);
                            v[0].element.remove()
                        }
                        r(et, function (n, t) {
                            0 < n ? w.addOption(t) : 0 > n && w.removeOption(t)
                        })
                    }

                    var h;
                    if (!(h = d.match(c)))throw cp("iexp", d, wt(f));
                    var st = o(h[2] || h[1]), ct = h[4] || h[6], lt = / as /.test(h[0]) && h[1], v = lt ? o(lt) : null, k = h[5], vt = o(h[3] || ""), ht = o(h[2] ? h[1] : ct), it = o(h[7]), l = h[8] ? o(h[8]) : null, rt = {}, g = [[{
                        element: f,
                        label: ""
                    }]], ut = {};
                    y && (n(y)(t), y.removeClass("ng-scope"), y.remove());
                    f.empty();
                    f.on("change", function () {
                        t.$apply(function () {
                            var o = it(t) || [], u, n;
                            p ? (u = [], r(f.val(), function (n) {
                                    n = l ? rt[n] : n;
                                    u.push("?" === n ? i : "" === n ? null : a(v ? v : ht, n, o[n]))
                                })) : (n = l ? rt[f.val()] : f.val(), u = "?" === n ? i : "" === n ? null : a(v ? v : ht, n, o[n]));
                            e.$setViewValue(u);
                            et()
                        })
                    });
                    e.$render = et;
                    t.$watchCollection(it, ft);
                    t.$watchCollection(function () {
                        var i = it(t), r, n, u;
                        if (i && s(i))for (r = Array(i.length), n = 0, u = i.length; n < u; n++)r[n] = a(st, n, i[n]); else if (i)for (n in r = {}, i)i.hasOwnProperty(n) && (r[n] = a(st, n, i[n]));
                        return r
                    }, ft);
                    p && t.$watchCollection(function () {
                        return e.$modelValue
                    }, ft)
                }

                var w, k, rt;
                if (v[1]) {
                    w = v[0];
                    v = v[1];
                    var p = a.multiple, d = a.ngOptions, y = !1, g, nt = !1, tt = f(t.createElement("option")), ot = f(t.createElement("optgroup")), b = tt.clone();
                    for (a = 0, k = l.children(), rt = k.length; a < rt; a++)if ("" === k[a].value) {
                        g = y = k.eq(a);
                        break
                    }
                    w.init(v, y, b);
                    p && (v.$isEmpty = function (n) {
                        return !n || 0 === n.length
                    });
                    d ? et(h, l, v) : p ? ft(h, l, v) : ut(h, l, v, w)
                }
            }
        }
    }], vp = ["$interpolate", function (n) {
        var t = {addOption: h, removeOption: h};
        return {
            restrict: "E", priority: 100, compile: function (i, r) {
                if (e(r.value)) {
                    var u = n(i.text(), !0);
                    u || r.$set("value", i.text())
                }
                return function (n, i, r) {
                    var e = i.parent(), f = e.data("$selectController") || e.parent().data("$selectController");
                    f && f.databound || (f = t);
                    u ? n.$watch(u, function (n, t) {
                            r.$set("value", n);
                            t !== n && f.removeOption(t);
                            f.addOption(n, i)
                        }) : f.addOption(r.value, i);
                    i.on("$destroy", function () {
                        f.removeOption(r.value)
                    })
                }
            }
        }
    }], yp = tt({restrict: "E", terminal: !1}), oh = function () {
        return {
            restrict: "A", require: "?ngModel", link: function (n, t, i, r) {
                r && (i.required = !0, r.$validators.required = function (n, t) {
                    return !i.required || !r.$isEmpty(t)
                }, i.$observe("required", function () {
                    r.$validate()
                }))
            }
        }
    }, sh = function () {
        return {
            restrict: "A", require: "?ngModel", link: function (n, t, r, u) {
                if (u) {
                    var f, o = r.ngPattern || r.pattern;
                    r.$observe("pattern", function (n) {
                        if (a(n) && 0 < n.length && (n = new RegExp("^" + n + "$")), n && !n.test)throw v("ngPattern")("noregexp", o, n, wt(t));
                        f = n || i;
                        u.$validate()
                    });
                    u.$validators.pattern = function (n) {
                        return u.$isEmpty(n) || e(f) || f.test(n)
                    }
                }
            }
        }
    }, hh = function () {
        return {
            restrict: "A", require: "?ngModel", link: function (n, t, i, r) {
                if (r) {
                    var u = -1;
                    i.$observe("maxlength", function (n) {
                        n = g(n);
                        u = isNaN(n) ? -1 : n;
                        r.$validate()
                    });
                    r.$validators.maxlength = function (n, t) {
                        return 0 > u || r.$isEmpty(t) || t.length <= u
                    }
                }
            }
        }
    }, ch = function () {
        return {
            restrict: "A", require: "?ngModel", link: function (n, t, i, r) {
                if (r) {
                    var u = 0;
                    i.$observe("minlength", function (n) {
                        u = g(n) || 0;
                        r.$validate()
                    });
                    r.$validators.minlength = function (n, t) {
                        return r.$isEmpty(t) || t.length >= u
                    }
                }
            }
        }
    };
    n.angular.bootstrap ? console.log("WARNING: Tried to load angular more than once.") : (dh(), nc(nt), f(t).ready(function () {
            wh(t, se)
        }))
}(window, document);
window.angular.$$csp() || window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}<\/style>');
angular.module("ngIOS9UIWebViewPatch", ["ng"]).config(["$provide", function (n) {
    "use strict";
    n.decorator("$browser", ["$delegate", "$window", function (n, t) {
        function i(n) {
            return /(iPhone|iPad|iPod).* OS 9_\d/.test(n) && !/Version\/9\./.test(n)
        }

        function r(n) {
            function r() {
                t = null
            }

            var t = null, i = n.url;
            return n.url = function () {
                return arguments.length ? (t = arguments[0], i.apply(n, arguments)) : t || i.apply(n, arguments)
            }, window.addEventListener("popstate", r, !1), window.addEventListener("hashchange", r, !1), n
        }

        return i(t.navigator.userAgent) ? r(n) : n
    }])
}]), function (n, t) {
    "use strict";
    var i = {}, u = {sdk: !1, ready: !1}, r;
    t.module("facebook", []).value("settings", i).value("flags", u).provider("Facebook", [function () {
        i.appId = null;
        this.setAppId = function (n) {
            i.appId = n
        };
        this.getAppId = function () {
            return i.appId
        };
        i.locale = "en_US";
        this.setLocale = function (n) {
            i.locale = n
        };
        this.getLocale = function () {
            return i.locale
        };
        i.status = !0;
        this.setStatus = function (n) {
            i.status = n
        };
        this.getStatus = function () {
            return i.status
        };
        i.channelUrl = null;
        this.setChannel = function (n) {
            i.channelUrl = n
        };
        this.getChannel = function () {
            return i.channelUrl
        };
        i.cookie = !0;
        this.setCookie = function (n) {
            i.cookie = n
        };
        this.getCookie = function () {
            return i.cookie
        };
        i.xfbml = !0;
        this.setXfbml = function (n) {
            i.xfbml = n
        };
        this.getXfbml = function () {
            return i.xfbml
        };
        this.setAuthResponse = function (n) {
            i.authResponse = n || !0
        };
        this.getAuthResponse = function () {
            return i.authResponse
        };
        i.frictionlessRequests = !1;
        this.setFrictionlessRequests = function (n) {
            i.frictionlessRequests = n
        };
        this.getFrictionlessRequests = function () {
            return i.frictionlessRequests
        };
        i.hideFlashCallback = null;
        this.setHideFlashCallback = function (n) {
            i.hideFlashCallback = n || null
        };
        this.getHideFlashCallback = function () {
            return i.hideFlashCallback
        };
        this.setInitCustomOption = function (n, r) {
            return t.isString(n) ? (i[n] = r, i[n]) : !1
        };
        this.getInitOption = function (n) {
            return !t.isString(n) || !i.hasOwnProperty(n) ? !1 : i[n]
        };
        i.loadSDK = !0;
        this.setLoadSDK = function (n) {
            i.loadSDK = !!n
        };
        this.getLoadSDK = function () {
            return i.loadSDK
        };
        i.version = "v2.0";
        this.setSdkVersion = function (n) {
            i.version = n
        };
        this.getSdkVersion = function () {
            return i.version
        };
        this.init = function (n, r) {
            t.isString(n) && (i.appId = n);
            t.isNumber(n) && (i.appId = n.toString());
            t.isObject(n) && t.extend(i, n);
            t.isDefined(r) && (i.loadSDK = !!r)
        };
        this.$get = ["$q", "$rootScope", "$timeout", "$window", function (n, f, e, o) {
            function s() {
                this.appId = i.appId
            }

            return s.prototype.isReady = function () {
                return u.ready
            }, s.prototype.login = function () {
                var i = n.defer(), u = Array.prototype.slice.call(arguments), r, f;
                return t.forEach(u, function (n, i) {
                    t.isFunction(n) && (r = n, f = i)
                }), t.isFunction(r) && t.isNumber(f) && u.splice(f, 1, function (n) {
                    e(function () {
                        n && t.isUndefined(n.error) ? i.resolve(n) : i.reject(n);
                        t.isFunction(r) && r(n)
                    })
                }), this.isReady() ? o.FB.login.apply(o.FB, u) : e(function () {
                        i.reject("Facebook.login() called before Facebook SDK has loaded.")
                    }), i.promise
            }, t.forEach(["logout", "api", "ui", "getLoginStatus"], function (i) {
                s.prototype[i] = function () {
                    var f = n.defer(), s = Array.prototype.slice.call(arguments), u, h;
                    return t.forEach(s, function (n, i) {
                        t.isFunction(n) && (u = n, h = i)
                    }), t.isFunction(u) && t.isNumber(h) && s.splice(h, 1, function (n) {
                        e(function () {
                            n && t.isUndefined(n.error) ? f.resolve(n) : f.reject(n);
                            t.isFunction(u) && u(n)
                        })
                    }), e(function () {
                        r.promise.then(function () {
                            o.FB[i].apply(FB, s)
                        })
                    }), f.promise
                }
            }), s.prototype.parseXFBML = function () {
                var t = n.defer();
                return e(function () {
                    r.promise.then(function () {
                        o.FB.XFBML.parse();
                        t.resolve()
                    })
                }), t.promise
            }, t.forEach(["subscribe", "unsubscribe",], function (i) {
                s.prototype[i] = function () {
                    var f = n.defer(), s = Array.prototype.slice.call(arguments), u, h;
                    return t.forEach(s, function (n, i) {
                        t.isFunction(n) && (u = n, h = i)
                    }), t.isFunction(u) && t.isNumber(h) && s.splice(h, 1, function (n) {
                        e(function () {
                            n && t.isUndefined(n.error) ? f.resolve(n) : f.reject(n);
                            t.isFunction(u) && u(n)
                        })
                    }), e(function () {
                        r.promise.then(function () {
                            o.FB.Event[i].apply(FB, s)
                        })
                    }), f.promise
                }
            }), new s
        }]
    }]).run(["$rootScope", "$q", "$window", "$timeout", function (n, f, e, o) {
        r = f.defer();
        var s = i.loadSDK;
        delete i.loadSDK;
        e.fbAsyncInit = function () {
            o(function () {
                if (!i.appId)throw"Missing appId setting.";
                FB.init(i);
                u.ready = !0;
                t.forEach({
                    "auth.login": "login",
                    "auth.logout": "logout",
                    "auth.prompt": "prompt",
                    "auth.sessionChange": "sessionChange",
                    "auth.statusChange": "statusChange",
                    "auth.authResponseChange": "authResponseChange",
                    "xfbml.render": "xfbmlRender",
                    "edge.create": "like",
                    "edge.remove": "unlike",
                    "comment.create": "comment",
                    "comment.remove": "uncomment"
                }, function (t, i) {
                    FB.Event.subscribe(i, function (i) {
                        o(function () {
                            n.$broadcast("Facebook:" + t, i)
                        })
                    })
                });
                n.$broadcast("Facebook:load");
                r.resolve(FB)
            })
        }, function () {
            var n = document.getElementById("fb-root");
            return n || (n = document.createElement("div"), n.id = "fb-root", document.body.insertBefore(n, document.body.childNodes[0])), n
        }();
        s && function () {
            var t = "//connect.facebook.net/" + i.locale + "/sdk.js#xfbml=1&version=" + i.version, n = document.createElement("script");
            n.id = "facebook-jssdk";
            n.async = !0;
            e.location.protocol.indexOf("file:") !== -1 && (t = "https:" + t);
            n.src = t;
            n.onload = function () {
                u.sdk = !0
            };
            document.getElementsByTagName("head")[0].appendChild(n)
        }()
    }])
}(window, angular);
angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.transition", "ui.bootstrap.collapse", "ui.bootstrap.accordion", "ui.bootstrap.alert", "ui.bootstrap.bindHtml", "ui.bootstrap.buttons", "ui.bootstrap.carousel", "ui.bootstrap.dateparser", "ui.bootstrap.position", "ui.bootstrap.datepicker", "ui.bootstrap.dropdown", "ui.bootstrap.modal", "ui.bootstrap.pagination", "ui.bootstrap.tooltip", "ui.bootstrap.popover", "ui.bootstrap.progressbar", "ui.bootstrap.rating", "ui.bootstrap.tabs", "ui.bootstrap.timepicker", "ui.bootstrap.typeahead"]);
angular.module("ui.bootstrap.tpls", ["template/accordion/accordion-group.html", "template/accordion/accordion.html", "template/alert/alert.html", "template/carousel/carousel.html", "template/carousel/slide.html", "template/datepicker/datepicker.html", "template/datepicker/day.html", "template/datepicker/month.html", "template/datepicker/popup.html", "template/datepicker/year.html", "template/modal/backdrop.html", "template/modal/window.html", "template/pagination/pager.html", "template/pagination/pagination.html", "template/tooltip/tooltip-html-unsafe-popup.html", "template/tooltip/tooltip-popup.html", "template/popover/popover.html", "template/progressbar/bar.html", "template/progressbar/progress.html", "template/progressbar/progressbar.html", "template/rating/rating.html", "template/tabs/tab.html", "template/tabs/tabset.html", "template/timepicker/timepicker.html", "template/typeahead/typeahead-match.html", "template/typeahead/typeahead-popup.html"]);
angular.module("ui.bootstrap.transition", []).factory("$transition", ["$q", "$timeout", "$rootScope", function (n, t, i) {
    function u(n) {
        for (var t in n)if (void 0 !== f.style[t])return n[t]
    }

    var r = function (u, f, e) {
        e = e || {};
        var s = n.defer(), o = r[e.animation ? "animationEndEventName" : "transitionEndEventName"], h = function () {
            i.$apply(function () {
                u.unbind(o, h);
                s.resolve(u)
            })
        };
        return o && u.bind(o, h), t(function () {
            angular.isString(f) ? u.addClass(f) : angular.isFunction(f) ? f(u) : angular.isObject(f) && u.css(f);
            o || s.resolve(u)
        }), s.promise.cancel = function () {
            o && u.unbind(o, h);
            s.reject("Transition cancelled")
        }, s.promise
    }, f = document.createElement("trans");
    return r.transitionEndEventName = u({
        WebkitTransition: "webkitTransitionEnd",
        MozTransition: "transitionend",
        OTransition: "oTransitionEnd",
        transition: "transitionend"
    }), r.animationEndEventName = u({
        WebkitTransition: "webkitAnimationEnd",
        MozTransition: "animationend",
        OTransition: "oAnimationEnd",
        transition: "animationend"
    }), r
}]);
angular.module("ui.bootstrap.collapse", ["ui.bootstrap.transition"]).directive("collapse", ["$transition", function (n) {
    return {
        link: function (t, i, r) {
            function e(t) {
                function f() {
                    u === r && (u = void 0)
                }

                var r = n(i, t);
                return u && u.cancel(), u = r, r.then(f, f), r
            }

            function h() {
                f ? (f = !1, o()) : (i.removeClass("collapse").addClass("collapsing"), e({height: i[0].scrollHeight + "px"}).then(o))
            }

            function o() {
                i.removeClass("collapsing");
                i.addClass("collapse in");
                i.css({height: "auto"})
            }

            function c() {
                f ? (f = !1, s(), i.css({height: 0})) : (i.css({height: i[0].scrollHeight + "px"}), i[0].offsetWidth, i.removeClass("collapse in").addClass("collapsing"), e({height: 0}).then(s))
            }

            function s() {
                i.removeClass("collapsing");
                i.addClass("collapse")
            }

            var u, f = !0;
            t.$watch(r.collapse, function (n) {
                n ? c() : h()
            })
        }
    }
}]);
angular.module("ui.bootstrap.accordion", ["ui.bootstrap.collapse"]).constant("accordionConfig", {closeOthers: !0}).controller("AccordionController", ["$scope", "$attrs", "accordionConfig", function (n, t, i) {
    this.groups = [];
    this.closeOthers = function (r) {
        var u = angular.isDefined(t.closeOthers) ? n.$eval(t.closeOthers) : i.closeOthers;
        u && angular.forEach(this.groups, function (n) {
            n !== r && (n.isOpen = !1)
        })
    };
    this.addGroup = function (n) {
        var t = this;
        this.groups.push(n);
        n.$on("$destroy", function () {
            t.removeGroup(n)
        })
    };
    this.removeGroup = function (n) {
        var t = this.groups.indexOf(n);
        -1 !== t && this.groups.splice(t, 1)
    }
}]).directive("accordion", function () {
    return {
        restrict: "EA",
        controller: "AccordionController",
        transclude: !0,
        replace: !1,
        templateUrl: "template/accordion/accordion.html"
    }
}).directive("accordionGroup", function () {
    return {
        require: "^accordion",
        restrict: "EA",
        transclude: !0,
        replace: !0,
        templateUrl: "template/accordion/accordion-group.html",
        scope: {heading: "@", isOpen: "=?", isDisabled: "=?"},
        controller: function () {
            this.setHeading = function (n) {
                this.heading = n
            }
        },
        link: function (n, t, i, r) {
            r.addGroup(n);
            n.$watch("isOpen", function (t) {
                t && r.closeOthers(n)
            });
            n.toggleOpen = function () {
                n.isDisabled || (n.isOpen = !n.isOpen)
            }
        }
    }
}).directive("accordionHeading", function () {
    return {
        restrict: "EA",
        transclude: !0,
        template: "",
        replace: !0,
        require: "^accordionGroup",
        link: function (n, t, i, r, u) {
            r.setHeading(u(n, function () {
            }))
        }
    }
}).directive("accordionTransclude", function () {
    return {
        require: "^accordionGroup", link: function (n, t, i, r) {
            n.$watch(function () {
                return r[i.accordionTransclude]
            }, function (n) {
                n && (t.html(""), t.append(n))
            })
        }
    }
});
angular.module("ui.bootstrap.alert", []).controller("AlertController", ["$scope", "$attrs", function (n, t) {
    n.closeable = "close" in t;
    this.close = n.close
}]).directive("alert", function () {
    return {
        restrict: "EA",
        controller: "AlertController",
        templateUrl: "template/alert/alert.html",
        transclude: !0,
        replace: !0,
        scope: {type: "@", close: "&"}
    }
}).directive("dismissOnTimeout", ["$timeout", function (n) {
    return {
        require: "alert", link: function (t, i, r, u) {
            n(function () {
                u.close()
            }, parseInt(r.dismissOnTimeout, 10))
        }
    }
}]);
angular.module("ui.bootstrap.bindHtml", []).directive("bindHtmlUnsafe", function () {
    return function (n, t, i) {
        t.addClass("ng-binding").data("$binding", i.bindHtmlUnsafe);
        n.$watch(i.bindHtmlUnsafe, function (n) {
            t.html(n || "")
        })
    }
});
angular.module("ui.bootstrap.buttons", []).constant("buttonConfig", {
    activeClass: "active",
    toggleEvent: "click"
}).controller("ButtonsController", ["buttonConfig", function (n) {
    this.activeClass = n.activeClass || "active";
    this.toggleEvent = n.toggleEvent || "click"
}]).directive("btnRadio", function () {
    return {
        require: ["btnRadio", "ngModel"], controller: "ButtonsController", link: function (n, t, i, r) {
            var f = r[0], u = r[1];
            u.$render = function () {
                t.toggleClass(f.activeClass, angular.equals(u.$modelValue, n.$eval(i.btnRadio)))
            };
            t.bind(f.toggleEvent, function () {
                var r = t.hasClass(f.activeClass);
                (!r || angular.isDefined(i.uncheckable)) && n.$apply(function () {
                    u.$setViewValue(r ? null : n.$eval(i.btnRadio));
                    u.$render()
                })
            })
        }
    }
}).directive("btnCheckbox", function () {
    return {
        require: ["btnCheckbox", "ngModel"], controller: "ButtonsController", link: function (n, t, i, r) {
            function e() {
                return o(i.btnCheckboxTrue, !0)
            }

            function s() {
                return o(i.btnCheckboxFalse, !1)
            }

            function o(t, i) {
                var r = n.$eval(t);
                return angular.isDefined(r) ? r : i
            }

            var f = r[0], u = r[1];
            u.$render = function () {
                t.toggleClass(f.activeClass, angular.equals(u.$modelValue, e()))
            };
            t.bind(f.toggleEvent, function () {
                n.$apply(function () {
                    u.$setViewValue(t.hasClass(f.activeClass) ? s() : e());
                    u.$render()
                })
            })
        }
    }
});
angular.module("ui.bootstrap.carousel", ["ui.bootstrap.transition"]).controller("CarouselController", ["$scope", "$timeout", "$interval", "$transition", function (n, t, i, r) {
    function h() {
        c();
        var t = +n.interval;
        !isNaN(t) && t > 0 && (o = i(a, t))
    }

    function c() {
        o && (i.cancel(o), o = null)
    }

    function a() {
        var t = +n.interval;
        s && !isNaN(t) && t > 0 ? n.next() : n.pause()
    }

    var o, s, f = this, u = f.slides = n.slides = [], e = -1, l;
    f.currentSlide = null;
    l = !1;
    f.select = n.select = function (i, o) {
        function c() {
            l || (f.currentSlide && angular.isString(o) && !n.noTransition && i.$element ? (i.$element.addClass(o), i.$element[0].offsetWidth, angular.forEach(u, function (n) {
                    angular.extend(n, {direction: "", entering: !1, leaving: !1, active: !1})
                }), angular.extend(i, {
                    direction: o,
                    active: !0,
                    entering: !0
                }), angular.extend(f.currentSlide || {}, {
                    direction: o,
                    leaving: !0
                }), n.$currentTransition = r(i.$element, {}), function (t, i) {
                    n.$currentTransition.then(function () {
                        s(t, i)
                    }, function () {
                        s(t, i)
                    })
                }(i, f.currentSlide)) : s(i, f.currentSlide), f.currentSlide = i, e = a, h())
        }

        function s(t, i) {
            angular.extend(t, {direction: "", active: !0, leaving: !1, entering: !1});
            angular.extend(i || {}, {direction: "", active: !1, leaving: !1, entering: !1});
            n.$currentTransition = null
        }

        var a = u.indexOf(i);
        void 0 === o && (o = a > e ? "next" : "prev");
        i && i !== f.currentSlide && (n.$currentTransition ? (n.$currentTransition.cancel(), t(c)) : c())
    };
    n.$on("$destroy", function () {
        l = !0
    });
    f.indexOfSlide = function (n) {
        return u.indexOf(n)
    };
    n.next = function () {
        var t = (e + 1) % u.length;
        if (!n.$currentTransition)return f.select(u[t], "next")
    };
    n.prev = function () {
        var t = 0 > e - 1 ? u.length - 1 : e - 1;
        if (!n.$currentTransition)return f.select(u[t], "prev")
    };
    n.isActive = function (n) {
        return f.currentSlide === n
    };
    n.$watch("interval", h);
    n.$on("$destroy", c);
    n.play = function () {
        s || (s = !0, h())
    };
    n.pause = function () {
        n.noPause || (s = !1, c())
    };
    f.addSlide = function (t, i) {
        t.$element = i;
        u.push(t);
        1 === u.length || t.active ? (f.select(u[u.length - 1]), 1 == u.length && n.play()) : t.active = !1
    };
    f.removeSlide = function (n) {
        var t = u.indexOf(n);
        u.splice(t, 1);
        u.length > 0 && n.active ? f.select(t >= u.length ? u[t - 1] : u[t]) : e > t && e--
    }
}]).directive("carousel", [function () {
    return {
        restrict: "EA",
        transclude: !0,
        replace: !0,
        controller: "CarouselController",
        require: "carousel",
        templateUrl: "template/carousel/carousel.html",
        scope: {interval: "=", noTransition: "=", noPause: "="}
    }
}]).directive("slide", function () {
    return {
        require: "^carousel",
        restrict: "EA",
        transclude: !0,
        replace: !0,
        templateUrl: "template/carousel/slide.html",
        scope: {active: "=?"},
        link: function (n, t, i, r) {
            r.addSlide(n, t);
            n.$on("$destroy", function () {
                r.removeSlide(n)
            });
            n.$watch("active", function (t) {
                t && r.select(n)
            })
        }
    }
});
angular.module("ui.bootstrap.dateparser", []).service("dateParser", ["$locale", "orderByFilter", function (n, t) {
    function i(n) {
        var r = [], i = n.split("");
        return angular.forEach(u, function (t, u) {
            var f = n.indexOf(u), e, o;
            if (f > -1) {
                for (n = n.split(""), i[f] = "(" + t.regex + ")", n[f] = "$", e = f + 1, o = f + u.length; o > e; e++)i[e] = "", n[e] = "$";
                n = n.join("");
                r.push({index: f, apply: t.apply})
            }
        }), {regex: new RegExp("^" + i.join("") + "$"), map: t(r, "index")}
    }

    function r(n, t, i) {
        return 1 === t && i > 28 ? 29 === i && (n % 4 == 0 && n % 100 != 0 || n % 400 == 0) : 3 === t || 5 === t || 8 === t || 10 === t ? 31 > i : !0
    }

    this.parsers = {};
    var u = {
        yyyy: {
            regex: "\\d{4}", apply: function (n) {
                this.year = +n
            }
        }, yy: {
            regex: "\\d{2}", apply: function (n) {
                this.year = +n + 2e3
            }
        }, y: {
            regex: "\\d{1,4}", apply: function (n) {
                this.year = +n
            }
        }, MMMM: {
            regex: n.DATETIME_FORMATS.MONTH.join("|"), apply: function (t) {
                this.month = n.DATETIME_FORMATS.MONTH.indexOf(t)
            }
        }, MMM: {
            regex: n.DATETIME_FORMATS.SHORTMONTH.join("|"), apply: function (t) {
                this.month = n.DATETIME_FORMATS.SHORTMONTH.indexOf(t)
            }
        }, MM: {
            regex: "0[1-9]|1[0-2]", apply: function (n) {
                this.month = n - 1
            }
        }, M: {
            regex: "[1-9]|1[0-2]", apply: function (n) {
                this.month = n - 1
            }
        }, dd: {
            regex: "[0-2][0-9]{1}|3[0-1]{1}", apply: function (n) {
                this.date = +n
            }
        }, d: {
            regex: "[1-2]?[0-9]{1}|3[0-1]{1}", apply: function (n) {
                this.date = +n
            }
        }, EEEE: {regex: n.DATETIME_FORMATS.DAY.join("|")}, EEE: {regex: n.DATETIME_FORMATS.SHORTDAY.join("|")}
    };
    this.parse = function (t, u) {
        var s;
        if (!angular.isString(t) || !u)return t;
        u = n.DATETIME_FORMATS[u] || u;
        this.parsers[u] || (this.parsers[u] = i(u));
        var h = this.parsers[u], l = h.regex, a = h.map, e = t.match(l);
        if (e && e.length) {
            for (var c, f = {
                year: 1900,
                month: 0,
                date: 1,
                hours: 0
            }, o = 1, v = e.length; v > o; o++)s = a[o - 1], s.apply && s.apply.call(f, e[o]);
            return r(f.year, f.month, f.date) && (c = new Date(f.year, f.month, f.date, f.hours)), c
        }
    }
}]);
angular.module("ui.bootstrap.position", []).factory("$position", ["$document", "$window", function (n, t) {
    function i(n, i) {
        return n.currentStyle ? n.currentStyle[i] : t.getComputedStyle ? t.getComputedStyle(n)[i] : n.style[i]
    }

    function r(n) {
        return "static" === (i(n, "position") || "static")
    }

    var u = function (t) {
        for (var u = n[0], i = t.offsetParent || u; i && i !== u && r(i);)i = i.offsetParent;
        return i || u
    };
    return {
        position: function (t) {
            var e = this.offset(t), r = {top: 0, left: 0}, i = u(t[0]), f;
            return i != n[0] && (r = this.offset(angular.element(i)), r.top += i.clientTop - i.scrollTop, r.left += i.clientLeft - i.scrollLeft), f = t[0].getBoundingClientRect(), {
                width: f.width || t.prop("offsetWidth"),
                height: f.height || t.prop("offsetHeight"),
                top: e.top - r.top,
                left: e.left - r.left
            }
        }, offset: function (i) {
            var r = i[0].getBoundingClientRect();
            return {
                width: r.width || i.prop("offsetWidth"),
                height: r.height || i.prop("offsetHeight"),
                top: r.top + (t.pageYOffset || n[0].documentElement.scrollTop),
                left: r.left + (t.pageXOffset || n[0].documentElement.scrollLeft)
            }
        }, positionElements: function (n, t, i, r) {
            var u, h, c, f, a = i.split("-"), l = a[0], e = a[1] || "center", o, s;
            u = r ? this.offset(n) : this.position(n);
            h = t.prop("offsetWidth");
            c = t.prop("offsetHeight");
            o = {
                center: function () {
                    return u.left + u.width / 2 - h / 2
                }, left: function () {
                    return u.left
                }, right: function () {
                    return u.left + u.width
                }
            };
            s = {
                center: function () {
                    return u.top + u.height / 2 - c / 2
                }, top: function () {
                    return u.top
                }, bottom: function () {
                    return u.top + u.height
                }
            };
            switch (l) {
                case"right":
                    f = {top: s[e](), left: o[l]()};
                    break;
                case"left":
                    f = {top: s[e](), left: u.left - h};
                    break;
                case"bottom":
                    f = {top: s[l](), left: o[e]()};
                    break;
                default:
                    f = {top: u.top - c, left: o[e]()}
            }
            return f
        }
    }
}]);
angular.module("ui.bootstrap.datepicker", ["ui.bootstrap.dateparser", "ui.bootstrap.position"]).constant("datepickerConfig", {
    formatDay: "dd",
    formatMonth: "MMMM",
    formatYear: "yyyy",
    formatDayHeader: "EEE",
    formatDayTitle: "MMMM yyyy",
    formatMonthTitle: "yyyy",
    datepickerMode: "day",
    minMode: "day",
    maxMode: "year",
    showWeeks: !0,
    startingDay: 0,
    yearRange: 20,
    minDate: null,
    maxDate: null
}).controller("DatepickerController", ["$scope", "$attrs", "$parse", "$interpolate", "$timeout", "$log", "dateFilter", "datepickerConfig", function (n, t, i, r, u, f, e, o) {
    var s = this, h = {$setViewValue: angular.noop}, c;
    this.modes = ["day", "month", "year"];
    angular.forEach(["formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "minMode", "maxMode", "showWeeks", "startingDay", "yearRange"], function (i, u) {
        s[i] = angular.isDefined(t[i]) ? 8 > u ? r(t[i])(n.$parent) : n.$parent.$eval(t[i]) : o[i]
    });
    angular.forEach(["minDate", "maxDate"], function (r) {
        t[r] ? n.$parent.$watch(i(t[r]), function (n) {
                s[r] = n ? new Date(n) : null;
                s.refreshView()
            }) : s[r] = o[r] ? new Date(o[r]) : null
    });
    n.datepickerMode = n.datepickerMode || o.datepickerMode;
    n.uniqueId = "datepicker-" + n.$id + "-" + Math.floor(1e4 * Math.random());
    this.activeDate = angular.isDefined(t.initDate) ? n.$parent.$eval(t.initDate) : new Date;
    n.isActive = function (t) {
        return 0 === s.compare(t.date, s.activeDate) ? (n.activeDateId = t.uid, !0) : !1
    };
    this.init = function (n) {
        h = n;
        h.$render = function () {
            s.render()
        }
    };
    this.render = function () {
        if (h.$modelValue) {
            var n = new Date(h.$modelValue), t = !isNaN(n);
            t ? this.activeDate = n : f.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');
            h.$setValidity("date", t)
        }
        this.refreshView()
    };
    this.refreshView = function () {
        if (this.element) {
            this._refreshView();
            var n = h.$modelValue ? new Date(h.$modelValue) : null;
            h.$setValidity("date-disabled", !n || this.element && !this.isDisabled(n))
        }
    };
    this.createDateObject = function (n, t) {
        var i = h.$modelValue ? new Date(h.$modelValue) : null;
        return {
            date: n,
            label: e(n, t),
            selected: i && 0 === this.compare(n, i),
            disabled: this.isDisabled(n),
            current: 0 === this.compare(n, new Date)
        }
    };
    this.isDisabled = function (i) {
        return this.minDate && this.compare(i, this.minDate) < 0 || this.maxDate && this.compare(i, this.maxDate) > 0 || t.dateDisabled && n.dateDisabled({
                date: i,
                mode: n.datepickerMode
            })
    };
    this.split = function (n, t) {
        for (var i = []; n.length > 0;)i.push(n.splice(0, t));
        return i
    };
    n.select = function (t) {
        if (n.datepickerMode === s.minMode) {
            var i = h.$modelValue ? new Date(h.$modelValue) : new Date(0, 0, 0, 0, 0, 0, 0);
            i.setFullYear(t.getFullYear(), t.getMonth(), t.getDate());
            h.$setViewValue(i);
            h.$render()
        } else s.activeDate = t, n.datepickerMode = s.modes[s.modes.indexOf(n.datepickerMode) - 1]
    };
    n.move = function (n) {
        var t = s.activeDate.getFullYear() + n * (s.step.years || 0), i = s.activeDate.getMonth() + n * (s.step.months || 0);
        s.activeDate.setFullYear(t, i, 1);
        s.refreshView()
    };
    n.toggleMode = function (t) {
        t = t || 1;
        n.datepickerMode === s.maxMode && 1 === t || n.datepickerMode === s.minMode && -1 === t || (n.datepickerMode = s.modes[s.modes.indexOf(n.datepickerMode) + t])
    };
    n.keys = {
        13: "enter",
        32: "space",
        33: "pageup",
        34: "pagedown",
        35: "end",
        36: "home",
        37: "left",
        38: "up",
        39: "right",
        40: "down"
    };
    c = function () {
        u(function () {
            s.element[0].focus()
        }, 0, !1)
    };
    n.$on("datepicker.focus", c);
    n.keydown = function (t) {
        var i = n.keys[t.which];
        if (i && !t.shiftKey && !t.altKey)if (t.preventDefault(), t.stopPropagation(), "enter" === i || "space" === i) {
            if (s.isDisabled(s.activeDate))return;
            n.select(s.activeDate);
            c()
        } else!t.ctrlKey || "up" !== i && "down" !== i ? (s.handleKeyDown(i, t), s.refreshView()) : (n.toggleMode("up" === i ? 1 : -1), c())
    }
}]).directive("datepicker", function () {
    return {
        restrict: "EA",
        replace: !0,
        templateUrl: "template/datepicker/datepicker.html",
        scope: {datepickerMode: "=?", dateDisabled: "&"},
        require: ["datepicker", "?^ngModel"],
        controller: "DatepickerController",
        link: function (n, t, i, r) {
            var f = r[0], u = r[1];
            u && f.init(u)
        }
    }
}).directive("daypicker", ["dateFilter", function (n) {
    return {
        restrict: "EA",
        replace: !0,
        templateUrl: "template/datepicker/day.html",
        require: "^datepicker",
        link: function (t, i, r, u) {
            function f(n, t) {
                return 1 !== t || n % 4 != 0 || n % 100 == 0 && n % 400 != 0 ? s[t] : 29
            }

            function e(n, t) {
                var r = new Array(t), i = new Date(n), u = 0;
                for (i.setHours(12); t > u;)r[u++] = new Date(i), i.setDate(i.getDate() + 1);
                return r
            }

            function o(n) {
                var t = new Date(n), i;
                return t.setDate(t.getDate() + 4 - (t.getDay() || 7)), i = t.getTime(), t.setMonth(0), t.setDate(1), Math.floor(Math.round((i - t) / 864e5) / 7) + 1
            }

            t.showWeeks = u.showWeeks;
            u.step = {months: 1};
            u.element = i;
            var s = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
            u._refreshView = function () {
                var p = u.activeDate.getFullYear(), h = u.activeDate.getMonth(), c = new Date(p, h, 1), s = u.startingDay - c.getDay(), l = s > 0 ? 7 - s : -s, a = new Date(c), i, r, f, v, y;
                for (l > 0 && a.setDate(-l + 1), i = e(a, 42), r = 0; 42 > r; r++)i[r] = angular.extend(u.createDateObject(i[r], u.formatDay), {
                    secondary: i[r].getMonth() !== h,
                    uid: t.uniqueId + "-" + r
                });
                for (t.labels = new Array(7), f = 0; 7 > f; f++)t.labels[f] = {
                    abbr: n(i[f].date, u.formatDayHeader),
                    full: n(i[f].date, "EEEE")
                };
                if (t.title = n(u.activeDate, u.formatDayTitle), t.rows = u.split(i, 7), t.showWeeks)for (t.weekNumbers = [], v = o(t.rows[0][0].date), y = t.rows.length; t.weekNumbers.push(v++) < y;);
            };
            u.compare = function (n, t) {
                return new Date(n.getFullYear(), n.getMonth(), n.getDate()) - new Date(t.getFullYear(), t.getMonth(), t.getDate())
            };
            u.handleKeyDown = function (n) {
                var t = u.activeDate.getDate(), i;
                "left" === n ? t -= 1 : "up" === n ? t -= 7 : "right" === n ? t += 1 : "down" === n ? t += 7 : "pageup" === n || "pagedown" === n ? (i = u.activeDate.getMonth() + ("pageup" === n ? -1 : 1), u.activeDate.setMonth(i, 1), t = Math.min(f(u.activeDate.getFullYear(), u.activeDate.getMonth()), t)) : "home" === n ? t = 1 : "end" === n && (t = f(u.activeDate.getFullYear(), u.activeDate.getMonth()));
                u.activeDate.setDate(t)
            };
            u.refreshView()
        }
    }
}]).directive("monthpicker", ["dateFilter", function (n) {
    return {
        restrict: "EA",
        replace: !0,
        templateUrl: "template/datepicker/month.html",
        require: "^datepicker",
        link: function (t, i, r, u) {
            u.step = {years: 1};
            u.element = i;
            u._refreshView = function () {
                for (var r = new Array(12), f = u.activeDate.getFullYear(), i = 0; 12 > i; i++)r[i] = angular.extend(u.createDateObject(new Date(f, i, 1), u.formatMonth), {uid: t.uniqueId + "-" + i});
                t.title = n(u.activeDate, u.formatMonthTitle);
                t.rows = u.split(r, 3)
            };
            u.compare = function (n, t) {
                return new Date(n.getFullYear(), n.getMonth()) - new Date(t.getFullYear(), t.getMonth())
            };
            u.handleKeyDown = function (n) {
                var t = u.activeDate.getMonth(), i;
                "left" === n ? t -= 1 : "up" === n ? t -= 3 : "right" === n ? t += 1 : "down" === n ? t += 3 : "pageup" === n || "pagedown" === n ? (i = u.activeDate.getFullYear() + ("pageup" === n ? -1 : 1), u.activeDate.setFullYear(i)) : "home" === n ? t = 0 : "end" === n && (t = 11);
                u.activeDate.setMonth(t)
            };
            u.refreshView()
        }
    }
}]).directive("yearpicker", ["dateFilter", function () {
    return {
        restrict: "EA",
        replace: !0,
        templateUrl: "template/datepicker/year.html",
        require: "^datepicker",
        link: function (n, t, i, r) {
            function f(n) {
                return parseInt((n - 1) / u, 10) * u + 1
            }

            var u = r.yearRange;
            r.step = {years: u};
            r.element = t;
            r._refreshView = function () {
                for (var i = new Array(u), t = 0, e = f(r.activeDate.getFullYear()); u > t; t++)i[t] = angular.extend(r.createDateObject(new Date(e + t, 0, 1), r.formatYear), {uid: n.uniqueId + "-" + t});
                n.title = [i[0].label, i[u - 1].label].join(" - ");
                n.rows = r.split(i, 5)
            };
            r.compare = function (n, t) {
                return n.getFullYear() - t.getFullYear()
            };
            r.handleKeyDown = function (n) {
                var t = r.activeDate.getFullYear();
                "left" === n ? t -= 1 : "up" === n ? t -= 5 : "right" === n ? t += 1 : "down" === n ? t += 5 : "pageup" === n || "pagedown" === n ? t += ("pageup" === n ? -1 : 1) * r.step.years : "home" === n ? t = f(r.activeDate.getFullYear()) : "end" === n && (t = f(r.activeDate.getFullYear()) + u - 1);
                r.activeDate.setFullYear(t)
            };
            r.refreshView()
        }
    }
}]).constant("datepickerPopupConfig", {
    datepickerPopup: "yyyy-MM-dd",
    currentText: "Today",
    clearText: "Clear",
    closeText: "Done",
    closeOnDateSelection: !0,
    appendToBody: !1,
    showButtonBar: !0
}).directive("datepickerPopup", ["$compile", "$parse", "$document", "$position", "dateFilter", "dateParser", "datepickerPopupConfig", function (n, t, i, r, u, f, e) {
    return {
        restrict: "EA",
        require: "ngModel",
        scope: {isOpen: "=?", currentText: "@", clearText: "@", closeText: "@", dateDisabled: "&"},
        link: function (o, s, h, c) {
            function b(n) {
                return n.replace(/([A-Z])/g, function (n) {
                    return "-" + n.toLowerCase()
                })
            }

            function k(n) {
                if (n) {
                    if (angular.isDate(n) && !isNaN(n))return c.$setValidity("date", !0), n;
                    if (angular.isString(n)) {
                        var t = f.parse(n, p) || new Date(n);
                        return isNaN(t) ? void c.$setValidity("date", !1) : (c.$setValidity("date", !0), t)
                    }
                    return void c.$setValidity("date", !1)
                }
                return c.$setValidity("date", !0), null
            }

            var p, g = angular.isDefined(h.closeOnDateSelection) ? o.$parent.$eval(h.closeOnDateSelection) : e.closeOnDateSelection, d = angular.isDefined(h.datepickerAppendToBody) ? o.$parent.$eval(h.datepickerAppendToBody) : e.appendToBody, l, a, v, w, y;
            o.showButtonBar = angular.isDefined(h.showButtonBar) ? o.$parent.$eval(h.showButtonBar) : e.showButtonBar;
            o.getText = function (n) {
                return o[n + "Text"] || e[n + "Text"]
            };
            h.$observe("datepickerPopup", function (n) {
                p = n || e.datepickerPopup;
                c.$render()
            });
            l = angular.element("<div datepicker-popup-wrap><div datepicker><\/div><\/div>");
            l.attr({"ng-model": "date", "ng-change": "dateSelection()"});
            a = angular.element(l.children()[0]);
            h.datepickerOptions && angular.forEach(o.$parent.$eval(h.datepickerOptions), function (n, t) {
                a.attr(b(t), n)
            });
            o.watchData = {};
            angular.forEach(["minDate", "maxDate", "datepickerMode"], function (n) {
                var i, r;
                h[n] && (i = t(h[n]), (o.$parent.$watch(i, function (t) {
                    o.watchData[n] = t
                }), a.attr(b(n), "watchData." + n), "datepickerMode" === n) && (r = i.assign, o.$watch("watchData." + n, function (n, t) {
                    n !== t && r(o.$parent, n)
                })))
            });
            h.dateDisabled && a.attr("date-disabled", "dateDisabled({ date: date, mode: mode })");
            c.$parsers.unshift(k);
            o.dateSelection = function (n) {
                angular.isDefined(n) && (o.date = n);
                c.$setViewValue(o.date);
                c.$render();
                g && (o.isOpen = !1, s[0].focus())
            };
            s.bind("input change keyup", function () {
                o.$apply(function () {
                    o.date = c.$modelValue
                })
            });
            c.$render = function () {
                var n = c.$viewValue ? u(c.$viewValue, p) : "";
                s.val(n);
                o.date = k(c.$modelValue)
            };
            v = function (n) {
                o.isOpen && n.target !== s[0] && o.$apply(function () {
                    o.isOpen = !1
                })
            };
            w = function (n) {
                o.keydown(n)
            };
            s.bind("keydown", w);
            o.keydown = function (n) {
                27 === n.which ? (n.preventDefault(), n.stopPropagation(), o.close()) : 40 !== n.which || o.isOpen || (o.isOpen = !0)
            };
            o.$watch("isOpen", function (n) {
                n ? (o.$broadcast("datepicker.focus"), o.position = d ? r.offset(s) : r.position(s), o.position.top = o.position.top + s.prop("offsetHeight"), i.bind("click", v)) : i.unbind("click", v)
            });
            o.select = function (n) {
                if ("today" === n) {
                    var t = new Date;
                    angular.isDate(c.$modelValue) ? (n = new Date(c.$modelValue), n.setFullYear(t.getFullYear(), t.getMonth(), t.getDate())) : n = new Date(t.setHours(0, 0, 0, 0))
                }
                o.dateSelection(n)
            };
            o.close = function () {
                o.isOpen = !1;
                s[0].focus()
            };
            y = n(l)(o);
            l.remove();
            d ? i.find("body").append(y) : s.after(y);
            o.$on("$destroy", function () {
                y.remove();
                s.unbind("keydown", w);
                i.unbind("click", v)
            })
        }
    }
}]).directive("datepickerPopupWrap", function () {
    return {
        restrict: "EA",
        replace: !0,
        transclude: !0,
        templateUrl: "template/datepicker/popup.html",
        link: function (n, t) {
            t.bind("click", function (n) {
                n.preventDefault();
                n.stopPropagation()
            })
        }
    }
});
angular.module("ui.bootstrap.dropdown", []).constant("dropdownConfig", {openClass: "open"}).service("dropdownService", ["$document", function (n) {
    var t = null, i, r;
    this.open = function (u) {
        t || (n.bind("click", i), n.bind("keydown", r));
        t && t !== u && (t.isOpen = !1);
        t = u
    };
    this.close = function (u) {
        t === u && (t = null, n.unbind("click", i), n.unbind("keydown", r))
    };
    i = function (n) {
        if (t) {
            var i = t.getToggleElement();
            n && i && i[0].contains(n.target) || t.$apply(function () {
                t.isOpen = !1
            })
        }
    };
    r = function (n) {
        27 === n.which && (t.focusToggleElement(), i())
    }
}]).controller("DropdownController", ["$scope", "$attrs", "$parse", "dropdownConfig", "dropdownService", "$animate", function (n, t, i, r, u, f) {
    var s, o = this, e = n.$new(), c = r.openClass, h = angular.noop, l = t.onToggle ? i(t.onToggle) : angular.noop;
    this.init = function (r) {
        o.$element = r;
        t.isOpen && (s = i(t.isOpen), h = s.assign, n.$watch(s, function (n) {
            e.isOpen = !!n
        }))
    };
    this.toggle = function (n) {
        return e.isOpen = arguments.length ? !!n : !e.isOpen
    };
    this.isOpen = function () {
        return e.isOpen
    };
    e.getToggleElement = function () {
        return o.toggleElement
    };
    e.focusToggleElement = function () {
        o.toggleElement && o.toggleElement[0].focus()
    };
    e.$watch("isOpen", function (t, i) {
        f[t ? "addClass" : "removeClass"](o.$element, c);
        t ? (e.focusToggleElement(), u.open(e)) : u.close(e);
        h(n, t);
        angular.isDefined(t) && t !== i && l(n, {open: !!t})
    });
    n.$on("$locationChangeSuccess", function () {
        e.isOpen = !1
    });
    n.$on("$destroy", function () {
        e.$destroy()
    })
}]).directive("dropdown", function () {
    return {
        controller: "DropdownController", link: function (n, t, i, r) {
            r.init(t)
        }
    }
}).directive("dropdownToggle", function () {
    return {
        require: "?^dropdown", link: function (n, t, i, r) {
            if (r) {
                r.toggleElement = t;
                var u = function (u) {
                    u.preventDefault();
                    t.hasClass("disabled") || i.disabled || n.$apply(function () {
                        r.toggle()
                    })
                };
                t.bind("click", u);
                t.attr({"aria-haspopup": !0, "aria-expanded": !1});
                n.$watch(r.isOpen, function (n) {
                    t.attr("aria-expanded", !!n)
                });
                n.$on("$destroy", function () {
                    t.unbind("click", u)
                })
            }
        }
    }
});
angular.module("ui.bootstrap.modal", ["ui.bootstrap.transition"]).factory("$$stackedMap", function () {
    return {
        createNew: function () {
            var n = [];
            return {
                add: function (t, i) {
                    n.push({key: t, value: i})
                }, get: function (t) {
                    for (var i = 0; i < n.length; i++)if (t == n[i].key)return n[i]
                }, keys: function () {
                    for (var i = [], t = 0; t < n.length; t++)i.push(n[t].key);
                    return i
                }, top: function () {
                    return n[n.length - 1]
                }, remove: function (t) {
                    for (var r = -1, i = 0; i < n.length; i++)if (t == n[i].key) {
                        r = i;
                        break
                    }
                    return n.splice(r, 1)[0]
                }, removeTop: function () {
                    return n.splice(n.length - 1, 1)[0]
                }, length: function () {
                    return n.length
                }
            }
        }
    }
}).directive("modalBackdrop", ["$timeout", function (n) {
    return {
        restrict: "EA", replace: !0, templateUrl: "template/modal/backdrop.html", link: function (t, i, r) {
            t.backdropClass = r.backdropClass || "";
            t.animate = !1;
            n(function () {
                t.animate = !0
            })
        }
    }
}]).directive("modalWindow", ["$modalStack", "$timeout", function (n, t) {
    return {
        restrict: "EA",
        scope: {index: "@", animate: "="},
        replace: !0,
        transclude: !0,
        templateUrl: function (n, t) {
            return t.templateUrl || "template/modal/window.html"
        },
        link: function (i, r, u) {
            r.addClass(u.windowClass || "");
            i.size = u.size;
            t(function () {
                i.animate = !0;
                r[0].querySelectorAll("[autofocus]").length || r[0].focus()
            });
            i.close = function (t) {
                var i = n.getTop();
                i && i.value.backdrop && "static" != i.value.backdrop && t.target === t.currentTarget && (t.preventDefault(), t.stopPropagation(), n.dismiss(i.key, "backdrop click"))
            }
        }
    }
}]).directive("modalTransclude", function () {
    return {
        link: function (n, t, i, r, u) {
            u(n.$parent, function (n) {
                t.empty();
                t.append(n)
            })
        }
    }
}).factory("$modalStack", ["$transition", "$timeout", "$document", "$compile", "$rootScope", "$$stackedMap", function (n, t, i, r, u, f) {
    function c() {
        for (var t = -1, i = e.keys(), n = 0; n < i.length; n++)e.get(i[n]).value.backdrop && (t = n);
        return t
    }

    function l(n) {
        var r = i.find("body").eq(0), t = e.get(n).value;
        e.remove(n);
        a(t.modalDomEl, t.modalScope, 300, function () {
            t.modalScope.$destroy();
            r.toggleClass(v, e.length() > 0);
            y()
        })
    }

    function y() {
        if (h && -1 == c()) {
            var n = o;
            a(h, o, 150, function () {
                n.$destroy();
                n = null
            });
            h = void 0;
            o = void 0
        }
    }

    function a(i, r, u, f) {
        function e() {
            e.done || (e.done = !0, i.remove(), f && f())
        }

        var o, s;
        r.animate = !1;
        o = n.transitionEndEventName;
        o ? (s = t(e, u), i.bind(o, function () {
                t.cancel(s);
                e();
                r.$apply()
            })) : t(e)
    }

    var h, o, v = "modal-open", e = f.createNew(), s = {};
    return u.$watch(c, function (n) {
        o && (o.index = n)
    }), i.bind("keydown", function (n) {
        var t;
        27 === n.which && (t = e.top(), t && t.value.keyboard && (n.preventDefault(), u.$apply(function () {
            s.dismiss(t.key, "escape key press")
        })))
    }), s.open = function (n, t) {
        var f, s, l, a, y;
        e.add(n, {deferred: t.deferred, modalScope: t.scope, backdrop: t.backdrop, keyboard: t.keyboard});
        f = i.find("body").eq(0);
        s = c();
        s >= 0 && !h && (o = u.$new(!0), o.index = s, l = angular.element("<div modal-backdrop><\/div>"), l.attr("backdrop-class", t.backdropClass), h = r(l)(o), f.append(h));
        a = angular.element("<div modal-window><\/div>");
        a.attr({
            "template-url": t.windowTemplateUrl,
            "window-class": t.windowClass,
            size: t.size,
            index: e.length() - 1,
            animate: "animate"
        }).html(t.content);
        y = r(a)(t.scope);
        e.top().value.modalDomEl = y;
        f.append(y);
        f.addClass(v)
    }, s.close = function (n, t) {
        var i = e.get(n);
        i && (i.value.deferred.resolve(t), l(n))
    }, s.dismiss = function (n, t) {
        var i = e.get(n);
        i && (i.value.deferred.reject(t), l(n))
    }, s.dismissAll = function (n) {
        for (var t = this.getTop(); t;)this.dismiss(t.key, n), t = this.getTop()
    }, s.getTop = function () {
        return e.top()
    }, s
}]).provider("$modal", function () {
    var n = {
        options: {backdrop: !0, keyboard: !0},
        $get: ["$injector", "$rootScope", "$q", "$http", "$templateCache", "$controller", "$modalStack", function (t, i, r, u, f, e, o) {
            function h(n) {
                return n.template ? r.when(n.template) : u.get(angular.isFunction(n.templateUrl) ? n.templateUrl() : n.templateUrl, {cache: f}).then(function (n) {
                        return n.data
                    })
            }

            function c(n) {
                var i = [];
                return angular.forEach(n, function (n) {
                    (angular.isFunction(n) || angular.isArray(n)) && i.push(r.when(t.invoke(n)))
                }), i
            }

            var s = {};
            return s.open = function (t) {
                var f = r.defer(), s = r.defer(), u = {
                    result: f.promise, opened: s.promise, close: function (n) {
                        o.close(u, n)
                    }, dismiss: function (n) {
                        o.dismiss(u, n)
                    }
                }, l;
                if (t = angular.extend({}, n.options, t), t.resolve = t.resolve || {}, !t.template && !t.templateUrl)throw new Error("One of template or templateUrl options is required.");
                return l = r.all([h(t)].concat(c(t.resolve))), l.then(function (n) {
                    var r = (t.scope || i).$new(), h, s, c;
                    r.$close = u.close;
                    r.$dismiss = u.dismiss;
                    s = {};
                    c = 1;
                    t.controller && (s.$scope = r, s.$modalInstance = u, angular.forEach(t.resolve, function (t, i) {
                        s[i] = n[c++]
                    }), h = e(t.controller, s), t.controllerAs && (r[t.controllerAs] = h));
                    o.open(u, {
                        scope: r,
                        deferred: f,
                        content: n[0],
                        backdrop: t.backdrop,
                        keyboard: t.keyboard,
                        backdropClass: t.backdropClass,
                        windowClass: t.windowClass,
                        windowTemplateUrl: t.windowTemplateUrl,
                        size: t.size
                    })
                }, function (n) {
                    f.reject(n)
                }), l.then(function () {
                    s.resolve(!0)
                }, function () {
                    s.reject(!1)
                }), u
            }, s
        }]
    };
    return n
});
angular.module("ui.bootstrap.pagination", []).controller("PaginationController", ["$scope", "$attrs", "$parse", function (n, t, i) {
    var u = this, r = {$setViewValue: angular.noop}, f = t.numPages ? i(t.numPages).assign : angular.noop;
    this.init = function (f, e) {
        r = f;
        this.config = e;
        r.$render = function () {
            u.render()
        };
        t.itemsPerPage ? n.$parent.$watch(i(t.itemsPerPage), function (t) {
                u.itemsPerPage = parseInt(t, 10);
                n.totalPages = u.calculateTotalPages()
            }) : this.itemsPerPage = e.itemsPerPage
    };
    this.calculateTotalPages = function () {
        var t = this.itemsPerPage < 1 ? 1 : Math.ceil(n.totalItems / this.itemsPerPage);
        return Math.max(t || 0, 1)
    };
    this.render = function () {
        n.page = parseInt(r.$viewValue, 10) || 1
    };
    n.selectPage = function (t) {
        n.page !== t && t > 0 && t <= n.totalPages && (r.$setViewValue(t), r.$render())
    };
    n.getText = function (t) {
        return n[t + "Text"] || u.config[t + "Text"]
    };
    n.noPrevious = function () {
        return 1 === n.page
    };
    n.noNext = function () {
        return n.page === n.totalPages
    };
    n.$watch("totalItems", function () {
        n.totalPages = u.calculateTotalPages()
    });
    n.$watch("totalPages", function (t) {
        f(n.$parent, t);
        n.page > t ? n.selectPage(t) : r.$render()
    })
}]).constant("paginationConfig", {
    itemsPerPage: 10,
    boundaryLinks: !1,
    directionLinks: !0,
    firstText: "First",
    previousText: "Previous",
    nextText: "Next",
    lastText: "Last",
    rotate: !0
}).directive("pagination", ["$parse", "paginationConfig", function (n, t) {
    return {
        restrict: "EA",
        scope: {totalItems: "=", firstText: "@", previousText: "@", nextText: "@", lastText: "@"},
        require: ["pagination", "?ngModel"],
        controller: "PaginationController",
        templateUrl: "template/pagination/pagination.html",
        replace: !0,
        link: function (i, r, u, f) {
            function s(n, t, i) {
                return {number: n, text: t, active: i}
            }

            function a(n, t) {
                var f = [], i = 1, r = t, o = angular.isDefined(e) && t > e, u, c, l, a;
                for (o && (h ? (i = Math.max(n - Math.floor(e / 2), 1), r = i + e - 1, r > t && (r = t, i = r - e + 1)) : (i = (Math.ceil(n / e) - 1) * e + 1, r = Math.min(i + e - 1, t))), u = i; r >= u; u++)c = s(u, u, u === n), f.push(c);
                return o && !h && (i > 1 && (l = s(i - 1, "...", !1), f.unshift(l)), t > r && (a = s(r + 1, "...", !1), f.push(a))), f
            }

            var o = f[0], c = f[1], e, h, l;
            c && (e = angular.isDefined(u.maxSize) ? i.$parent.$eval(u.maxSize) : t.maxSize, h = angular.isDefined(u.rotate) ? i.$parent.$eval(u.rotate) : t.rotate, i.boundaryLinks = angular.isDefined(u.boundaryLinks) ? i.$parent.$eval(u.boundaryLinks) : t.boundaryLinks, i.directionLinks = angular.isDefined(u.directionLinks) ? i.$parent.$eval(u.directionLinks) : t.directionLinks, o.init(c, t), u.maxSize && i.$parent.$watch(n(u.maxSize), function (n) {
                e = parseInt(n, 10);
                o.render()
            }), l = o.render, o.render = function () {
                l();
                i.page > 0 && i.page <= i.totalPages && (i.pages = a(i.page, i.totalPages))
            })
        }
    }
}]).constant("pagerConfig", {
    itemsPerPage: 10,
    previousText: "« Previous",
    nextText: "Next »",
    align: !0
}).directive("pager", ["pagerConfig", function (n) {
    return {
        restrict: "EA",
        scope: {totalItems: "=", previousText: "@", nextText: "@"},
        require: ["pager", "?ngModel"],
        controller: "PaginationController",
        templateUrl: "template/pagination/pager.html",
        replace: !0,
        link: function (t, i, r, u) {
            var e = u[0], f = u[1];
            f && (t.align = angular.isDefined(r.align) ? t.$parent.$eval(r.align) : n.align, e.init(f, n))
        }
    }
}]);
angular.module("ui.bootstrap.tooltip", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).provider("$tooltip", function () {
    function i(n) {
        var t = "-";
        return n.replace(/[A-Z]/g, function (n, i) {
            return (i ? t : "") + n.toLowerCase()
        })
    }

    var r = {placement: "top", animation: !0, popupDelay: 0}, n = {
        mouseenter: "mouseleave",
        click: "click",
        focus: "blur"
    }, t = {};
    this.options = function (n) {
        angular.extend(t, n)
    };
    this.setTriggers = function (t) {
        angular.extend(n, t)
    };
    this.$get = ["$window", "$compile", "$timeout", "$document", "$position", "$interpolate", function (u, f, e, o, s, h) {
        return function (u, c, l) {
            function p(t) {
                var i = t || a.trigger || l, r = n[i] || i;
                return {show: i, hide: r}
            }

            var a = angular.extend({}, r, t), w = i(u), v = h.startSymbol(), y = h.endSymbol(), b = "<div " + w + '-popup title="' + v + "title" + y + '" content="' + v + "content" + y + '" placement="' + v + "placement" + y + '" animation="animation" is-open="isOpen"><\/div>';
            return {
                restrict: "EA", compile: function () {
                    var n = f(b);
                    return function (t, i, r) {
                        function et() {
                            f.isOpen ? g() : d()
                        }

                        function d() {
                            (!at || t.$eval(r[c + "Enable"])) && (st(), f.popupDelay ? y || (y = e(ut, f.popupDelay, !1), y.then(function (n) {
                                    n()
                                })) : ut()())
                        }

                        function g() {
                            t.$apply(function () {
                                nt()
                            })
                        }

                        function ut() {
                            return y = null, v && (e.cancel(v), v = null), f.content ? (ot(), h.css({
                                    top: 0,
                                    left: 0,
                                    display: "block"
                                }), b ? o.find("body").append(h) : i.after(h), ft(), f.isOpen = !0, f.$digest(), ft) : angular.noop
                        }

                        function nt() {
                            f.isOpen = !1;
                            e.cancel(y);
                            y = null;
                            f.animation ? v || (v = e(k, 500)) : k()
                        }

                        function ot() {
                            h && k();
                            w = f.$new();
                            h = n(w, angular.noop)
                        }

                        function k() {
                            v = null;
                            h && (h.remove(), h = null);
                            w && (w.$destroy(), w = null)
                        }

                        function st() {
                            ht();
                            ct()
                        }

                        function ht() {
                            var n = r[c + "Placement"];
                            f.placement = angular.isDefined(n) ? n : a.placement
                        }

                        function ct() {
                            var t = r[c + "PopupDelay"], n = parseInt(t, 10);
                            f.popupDelay = isNaN(n) ? a.popupDelay : n
                        }

                        function lt() {
                            var n = r[c + "Trigger"];
                            tt();
                            l = p(n);
                            l.show === l.hide ? i.bind(l.show, et) : (i.bind(l.show, d), i.bind(l.hide, g))
                        }

                        var h, w, v, y, b = angular.isDefined(a.appendToBody) ? a.appendToBody : !1, l = p(void 0), at = angular.isDefined(r[c + "Enable"]), f = t.$new(!0), ft = function () {
                            var n = s.positionElements(i, h, f.placement, b);
                            n.top += "px";
                            n.left += "px";
                            h.css(n)
                        }, tt, it, rt;
                        f.isOpen = !1;
                        r.$observe(u, function (n) {
                            f.content = n;
                            !n && f.isOpen && nt()
                        });
                        r.$observe(c + "Title", function (n) {
                            f.title = n
                        });
                        tt = function () {
                            i.unbind(l.show, d);
                            i.unbind(l.hide, g)
                        };
                        lt();
                        it = t.$eval(r[c + "Animation"]);
                        f.animation = angular.isDefined(it) ? !!it : a.animation;
                        rt = t.$eval(r[c + "AppendToBody"]);
                        b = angular.isDefined(rt) ? rt : b;
                        b && t.$on("$locationChangeSuccess", function () {
                            f.isOpen && nt()
                        });
                        t.$on("$destroy", function () {
                            e.cancel(v);
                            e.cancel(y);
                            tt();
                            k();
                            f = null
                        })
                    }
                }
            }
        }
    }]
}).directive("tooltipPopup", function () {
    return {
        restrict: "EA",
        replace: !0,
        scope: {content: "@", placement: "@", animation: "&", isOpen: "&"},
        templateUrl: "template/tooltip/tooltip-popup.html"
    }
}).directive("tooltip", ["$tooltip", function (n) {
    return n("tooltip", "tooltip", "mouseenter")
}]).directive("tooltipHtmlUnsafePopup", function () {
    return {
        restrict: "EA",
        replace: !0,
        scope: {content: "@", placement: "@", animation: "&", isOpen: "&"},
        templateUrl: "template/tooltip/tooltip-html-unsafe-popup.html"
    }
}).directive("tooltipHtmlUnsafe", ["$tooltip", function (n) {
    return n("tooltipHtmlUnsafe", "tooltip", "mouseenter")
}]);
angular.module("ui.bootstrap.popover", ["ui.bootstrap.tooltip"]).directive("popoverPopup", function () {
    return {
        restrict: "EA",
        replace: !0,
        scope: {title: "@", content: "@", placement: "@", animation: "&", isOpen: "&"},
        templateUrl: "template/popover/popover.html"
    }
}).directive("popover", ["$tooltip", function (n) {
    return n("popover", "popover", "click")
}]);
angular.module("ui.bootstrap.progressbar", []).constant("progressConfig", {
    animate: !0,
    max: 100
}).controller("ProgressController", ["$scope", "$attrs", "progressConfig", function (n, t, i) {
    var r = this, u = angular.isDefined(t.animate) ? n.$parent.$eval(t.animate) : i.animate;
    this.bars = [];
    n.max = angular.isDefined(t.max) ? n.$parent.$eval(t.max) : i.max;
    this.addBar = function (t, i) {
        u || i.css({transition: "none"});
        this.bars.push(t);
        t.$watch("value", function (i) {
            t.percent = +(100 * i / n.max).toFixed(2)
        });
        t.$on("$destroy", function () {
            i = null;
            r.removeBar(t)
        })
    };
    this.removeBar = function (n) {
        this.bars.splice(this.bars.indexOf(n), 1)
    }
}]).directive("progress", function () {
    return {
        restrict: "EA",
        replace: !0,
        transclude: !0,
        controller: "ProgressController",
        require: "progress",
        scope: {},
        templateUrl: "template/progressbar/progress.html"
    }
}).directive("bar", function () {
    return {
        restrict: "EA",
        replace: !0,
        transclude: !0,
        require: "^progress",
        scope: {value: "=", type: "@"},
        templateUrl: "template/progressbar/bar.html",
        link: function (n, t, i, r) {
            r.addBar(n, t)
        }
    }
}).directive("progressbar", function () {
    return {
        restrict: "EA",
        replace: !0,
        transclude: !0,
        controller: "ProgressController",
        scope: {value: "=", type: "@"},
        templateUrl: "template/progressbar/progressbar.html",
        link: function (n, t, i, r) {
            r.addBar(n, angular.element(t.children()[0]))
        }
    }
});
angular.module("ui.bootstrap.rating", []).constant("ratingConfig", {
    max: 5,
    stateOn: null,
    stateOff: null
}).controller("RatingController", ["$scope", "$attrs", "ratingConfig", function (n, t, i) {
    var r = {$setViewValue: angular.noop};
    this.init = function (u) {
        r = u;
        r.$render = this.render;
        this.stateOn = angular.isDefined(t.stateOn) ? n.$parent.$eval(t.stateOn) : i.stateOn;
        this.stateOff = angular.isDefined(t.stateOff) ? n.$parent.$eval(t.stateOff) : i.stateOff;
        var f = angular.isDefined(t.ratingStates) ? n.$parent.$eval(t.ratingStates) : new Array(angular.isDefined(t.max) ? n.$parent.$eval(t.max) : i.max);
        n.range = this.buildTemplateObjects(f)
    };
    this.buildTemplateObjects = function (n) {
        for (var t = 0, i = n.length; i > t; t++)n[t] = angular.extend({index: t}, {
            stateOn: this.stateOn,
            stateOff: this.stateOff
        }, n[t]);
        return n
    };
    n.rate = function (t) {
        !n.readonly && t >= 0 && t <= n.range.length && (r.$setViewValue(t), r.$render())
    };
    n.enter = function (t) {
        n.readonly || (n.value = t);
        n.onHover({value: t})
    };
    n.reset = function () {
        n.value = r.$viewValue;
        n.onLeave()
    };
    n.onKeydown = function (t) {
        /(37|38|39|40)/.test(t.which) && (t.preventDefault(), t.stopPropagation(), n.rate(n.value + (38 === t.which || 39 === t.which ? 1 : -1)))
    };
    this.render = function () {
        n.value = r.$viewValue
    }
}]).directive("rating", function () {
    return {
        restrict: "EA",
        require: ["rating", "ngModel"],
        scope: {readonly: "=?", onHover: "&", onLeave: "&"},
        controller: "RatingController",
        templateUrl: "template/rating/rating.html",
        replace: !0,
        link: function (n, t, i, r) {
            var f = r[0], u = r[1];
            u && f.init(u)
        }
    }
});
angular.module("ui.bootstrap.tabs", []).controller("TabsetController", ["$scope", function (n) {
    var i = this, t = i.tabs = n.tabs = [], r;
    i.select = function (n) {
        angular.forEach(t, function (t) {
            t.active && t !== n && (t.active = !1, t.onDeselect())
        });
        n.active = !0;
        n.onSelect()
    };
    i.addTab = function (n) {
        t.push(n);
        1 === t.length ? n.active = !0 : n.active && i.select(n)
    };
    i.removeTab = function (n) {
        var u = t.indexOf(n), f;
        n.active && t.length > 1 && !r && (f = u == t.length - 1 ? u - 1 : u + 1, i.select(t[f]));
        t.splice(u, 1)
    };
    n.$on("$destroy", function () {
        r = !0
    })
}]).directive("tabset", function () {
    return {
        restrict: "EA",
        transclude: !0,
        replace: !0,
        scope: {type: "@"},
        controller: "TabsetController",
        templateUrl: "template/tabs/tabset.html",
        link: function (n, t, i) {
            n.vertical = angular.isDefined(i.vertical) ? n.$parent.$eval(i.vertical) : !1;
            n.justified = angular.isDefined(i.justified) ? n.$parent.$eval(i.justified) : !1
        }
    }
}).directive("tab", ["$parse", function (n) {
    return {
        require: "^tabset",
        restrict: "EA",
        replace: !0,
        templateUrl: "template/tabs/tab.html",
        transclude: !0,
        scope: {active: "=?", heading: "@", onSelect: "&select", onDeselect: "&deselect"},
        controller: function () {
        },
        compile: function (t, i, r) {
            return function (t, i, u, f) {
                t.$watch("active", function (n) {
                    n && f.select(t)
                });
                t.disabled = !1;
                u.disabled && t.$parent.$watch(n(u.disabled), function (n) {
                    t.disabled = !!n
                });
                t.select = function () {
                    t.disabled || (t.active = !0)
                };
                f.addTab(t);
                t.$on("$destroy", function () {
                    f.removeTab(t)
                });
                t.$transcludeFn = r
            }
        }
    }
}]).directive("tabHeadingTransclude", [function () {
    return {
        restrict: "A", require: "^tab", link: function (n, t) {
            n.$watch("headingElement", function (n) {
                n && (t.html(""), t.append(n))
            })
        }
    }
}]).directive("tabContentTransclude", function () {
    function n(n) {
        return n.tagName && (n.hasAttribute("tab-heading") || n.hasAttribute("data-tab-heading") || "tab-heading" === n.tagName.toLowerCase() || "data-tab-heading" === n.tagName.toLowerCase())
    }

    return {
        restrict: "A", require: "^tabset", link: function (t, i, r) {
            var u = t.$eval(r.tabContentTransclude);
            u.$transcludeFn(u.$parent, function (t) {
                angular.forEach(t, function (t) {
                    n(t) ? u.headingElement = t : i.append(t)
                })
            })
        }
    }
});
angular.module("ui.bootstrap.timepicker", []).constant("timepickerConfig", {
    hourStep: 1,
    minuteStep: 1,
    showMeridian: !0,
    meridians: null,
    readonlyInput: !1,
    mousewheel: !0
}).controller("TimepickerController", ["$scope", "$attrs", "$parse", "$log", "$locale", "timepickerConfig", function (n, t, i, r, u, f) {
    function p() {
        var t = parseInt(n.hours, 10), i = n.showMeridian ? t > 0 && 13 > t : t >= 0 && 24 > t;
        if (i)return (n.showMeridian && (12 === t && (t = 0), n.meridian === y[1] && (t += 12)), t)
    }

    function w() {
        var t = parseInt(n.minutes, 10);
        if (t >= 0 && 60 > t)return t
    }

    function h(n) {
        return angular.isDefined(n) && n.toString().length < 2 ? "0" + n : n
    }

    function c(n) {
        b();
        o.$setViewValue(new Date(e));
        v(n)
    }

    function b() {
        o.$setValidity("time", !0);
        n.invalidHours = !1;
        n.invalidMinutes = !1
    }

    function v(t) {
        var i = e.getHours(), r = e.getMinutes();
        n.showMeridian && (i = 0 === i || 12 === i ? 12 : i % 12);
        n.hours = "h" === t ? i : h(i);
        n.minutes = "m" === t ? r : h(r);
        n.meridian = e.getHours() < 12 ? y[0] : y[1]
    }

    function s(n) {
        var t = new Date(e.getTime() + 6e4 * n);
        e.setHours(t.getHours(), t.getMinutes());
        c()
    }

    var e = new Date, o = {$setViewValue: angular.noop}, y = angular.isDefined(t.meridians) ? n.$parent.$eval(t.meridians) : f.meridians || u.DATETIME_FORMATS.AMPMS, l, a;
    this.init = function (i, r) {
        o = i;
        o.$render = this.render;
        var u = r.eq(0), e = r.eq(1), s = angular.isDefined(t.mousewheel) ? n.$parent.$eval(t.mousewheel) : f.mousewheel;
        s && this.setupMousewheelEvents(u, e);
        n.readonlyInput = angular.isDefined(t.readonlyInput) ? n.$parent.$eval(t.readonlyInput) : f.readonlyInput;
        this.setupInputEvents(u, e)
    };
    l = f.hourStep;
    t.hourStep && n.$parent.$watch(i(t.hourStep), function (n) {
        l = parseInt(n, 10)
    });
    a = f.minuteStep;
    t.minuteStep && n.$parent.$watch(i(t.minuteStep), function (n) {
        a = parseInt(n, 10)
    });
    n.showMeridian = f.showMeridian;
    t.showMeridian && n.$parent.$watch(i(t.showMeridian), function (t) {
        if (n.showMeridian = !!t, o.$error.time) {
            var i = p(), r = w();
            angular.isDefined(i) && angular.isDefined(r) && (e.setHours(i), c())
        } else v()
    });
    this.setupMousewheelEvents = function (t, i) {
        var r = function (n) {
            n.originalEvent && (n = n.originalEvent);
            var t = n.wheelDelta ? n.wheelDelta : -n.deltaY;
            return n.detail || t > 0
        };
        t.bind("mousewheel wheel", function (t) {
            n.$apply(r(t) ? n.incrementHours() : n.decrementHours());
            t.preventDefault()
        });
        i.bind("mousewheel wheel", function (t) {
            n.$apply(r(t) ? n.incrementMinutes() : n.decrementMinutes());
            t.preventDefault()
        })
    };
    this.setupInputEvents = function (t, i) {
        if (n.readonlyInput)return n.updateHours = angular.noop, void(n.updateMinutes = angular.noop);
        var r = function (t, i) {
            o.$setViewValue(null);
            o.$setValidity("time", !1);
            angular.isDefined(t) && (n.invalidHours = t);
            angular.isDefined(i) && (n.invalidMinutes = i)
        };
        n.updateHours = function () {
            var n = p();
            angular.isDefined(n) ? (e.setHours(n), c("h")) : r(!0)
        };
        t.bind("blur", function () {
            !n.invalidHours && n.hours < 10 && n.$apply(function () {
                n.hours = h(n.hours)
            })
        });
        n.updateMinutes = function () {
            var n = w();
            angular.isDefined(n) ? (e.setMinutes(n), c("m")) : r(void 0, !0)
        };
        i.bind("blur", function () {
            !n.invalidMinutes && n.minutes < 10 && n.$apply(function () {
                n.minutes = h(n.minutes)
            })
        })
    };
    this.render = function () {
        var n = o.$modelValue ? new Date(o.$modelValue) : null;
        isNaN(n) ? (o.$setValidity("time", !1), r.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')) : (n && (e = n), b(), v())
    };
    n.incrementHours = function () {
        s(60 * l)
    };
    n.decrementHours = function () {
        s(60 * -l)
    };
    n.incrementMinutes = function () {
        s(a)
    };
    n.decrementMinutes = function () {
        s(-a)
    };
    n.toggleMeridian = function () {
        s(720 * (e.getHours() < 12 ? 1 : -1))
    }
}]).directive("timepicker", function () {
    return {
        restrict: "EA",
        require: ["timepicker", "?^ngModel"],
        controller: "TimepickerController",
        replace: !0,
        scope: {},
        templateUrl: "template/timepicker/timepicker.html",
        link: function (n, t, i, r) {
            var f = r[0], u = r[1];
            u && f.init(u, t.find("input"))
        }
    }
});
angular.module("ui.bootstrap.typeahead", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).factory("typeaheadParser", ["$parse", function (n) {
    var t = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;
    return {
        parse: function (i) {
            var r = i.match(t);
            if (!r)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "' + i + '".');
            return {itemName: r[3], source: n(r[4]), viewMapper: n(r[2] || r[1]), modelMapper: n(r[1])}
        }
    }
}]).directive("typeahead", ["$compile", "$parse", "$q", "$timeout", "$document", "$position", "typeaheadParser", function (n, t, i, r, u, f, e) {
    var o = [9, 13, 27, 38, 40];
    return {
        require: "ngModel", link: function (s, h, c, l) {
            var d, st = s.$eval(c.typeaheadMinLength) || 1, ft = s.$eval(c.typeaheadWaitMs) || 0, ht = s.$eval(c.typeaheadEditable) !== !1, p = t(c.typeaheadLoading).assign || angular.noop, ct = t(c.typeaheadOnSelect), et = c.typeaheadInputFormatter ? t(c.typeaheadInputFormatter) : void 0, g = c.typeaheadAppendToBody ? s.$eval(c.typeaheadAppendToBody) : !1, lt = s.$eval(c.typeaheadFocusFirst) !== !1, at = t(c.ngModel).assign, v = e.parse(c.typeahead), a = s.$new(), w, b, y, nt, tt, it, ot, rt, ut, k;
            s.$on("$destroy", function () {
                a.$destroy()
            });
            w = "typeahead-" + a.$id + "-" + Math.floor(1e4 * Math.random());
            h.attr({"aria-autocomplete": "list", "aria-expanded": !1, "aria-owns": w});
            b = angular.element("<div typeahead-popup><\/div>");
            b.attr({
                id: w,
                matches: "matches",
                active: "activeIdx",
                select: "select(activeIdx)",
                query: "query",
                position: "position"
            });
            angular.isDefined(c.typeaheadTemplateUrl) && b.attr("template-url", c.typeaheadTemplateUrl);
            y = function () {
                a.matches = [];
                a.activeIdx = -1;
                h.attr("aria-expanded", !1)
            };
            nt = function (n) {
                return w + "-option-" + n
            };
            a.$watch("activeIdx", function (n) {
                0 > n ? h.removeAttr("aria-activedescendant") : h.attr("aria-activedescendant", nt(n))
            });
            tt = function (n) {
                var t = {$viewValue: n};
                p(s, !0);
                i.when(v.source(s, t)).then(function (i) {
                    var u = n === l.$viewValue, r;
                    if (u && d)if (i.length > 0) {
                        for (a.activeIdx = lt ? 0 : -1, a.matches.length = 0, r = 0; r < i.length; r++)t[v.itemName] = i[r], a.matches.push({
                            id: nt(r),
                            label: v.viewMapper(a, t),
                            model: i[r]
                        });
                        a.query = n;
                        a.position = g ? f.offset(h) : f.position(h);
                        a.position.top = a.position.top + h.prop("offsetHeight");
                        h.attr("aria-expanded", !0)
                    } else y();
                    u && p(s, !1)
                }, function () {
                    y();
                    p(s, !1)
                })
            };
            y();
            a.query = void 0;
            ot = function (n) {
                it = r(function () {
                    tt(n)
                }, ft)
            };
            rt = function () {
                it && r.cancel(it)
            };
            l.$parsers.unshift(function (n) {
                return d = !0, n && n.length >= st ? ft > 0 ? (rt(), ot(n)) : tt(n) : (p(s, !1), rt(), y()), ht ? n : n ? void l.$setValidity("editable", !1) : (l.$setValidity("editable", !0), n)
            });
            l.$formatters.push(function (n) {
                var i, r, t = {};
                return et ? (t.$model = n, et(s, t)) : (t[v.itemName] = n, i = v.viewMapper(s, t), t[v.itemName] = void 0, r = v.viewMapper(s, t), i !== r ? i : n)
            });
            a.select = function (n) {
                var t, u, i = {};
                i[v.itemName] = u = a.matches[n].model;
                t = v.modelMapper(s, i);
                at(s, t);
                l.$setValidity("editable", !0);
                ct(s, {$item: u, $model: t, $label: v.viewMapper(s, i)});
                y();
                r(function () {
                    h[0].focus()
                }, 0, !1)
            };
            h.bind("keydown", function (n) {
                0 !== a.matches.length && -1 !== o.indexOf(n.which) && (-1 != a.activeIdx || 13 !== n.which && 9 !== n.which) && (n.preventDefault(), 40 === n.which ? (a.activeIdx = (a.activeIdx + 1) % a.matches.length, a.$digest()) : 38 === n.which ? (a.activeIdx = (a.activeIdx > 0 ? a.activeIdx : a.matches.length) - 1, a.$digest()) : 13 === n.which || 9 === n.which ? a.$apply(function () {
                                a.select(a.activeIdx)
                            }) : 27 === n.which && (n.stopPropagation(), y(), a.$digest()))
            });
            h.bind("blur", function () {
                d = !1
            });
            ut = function (n) {
                h[0] !== n.target && (y(), a.$digest())
            };
            u.bind("click", ut);
            s.$on("$destroy", function () {
                u.unbind("click", ut);
                g && k.remove()
            });
            k = n(b)(a);
            g ? u.find("body").append(k) : h.after(k)
        }
    }
}]).directive("typeaheadPopup", function () {
    return {
        restrict: "EA",
        scope: {matches: "=", query: "=", active: "=", position: "=", select: "&"},
        replace: !0,
        templateUrl: "template/typeahead/typeahead-popup.html",
        link: function (n, t, i) {
            n.templateUrl = i.templateUrl;
            n.isOpen = function () {
                return n.matches.length > 0
            };
            n.isActive = function (t) {
                return n.active == t
            };
            n.selectActive = function (t) {
                n.active = t
            };
            n.selectMatch = function (t) {
                n.select({activeIdx: t})
            }
        }
    }
}).directive("typeaheadMatch", ["$http", "$templateCache", "$compile", "$parse", function (n, t, i, r) {
    return {
        restrict: "EA", scope: {index: "=", match: "=", query: "="}, link: function (u, f, e) {
            var o = r(e.templateUrl)(u.$parent) || "template/typeahead/typeahead-match.html";
            n.get(o, {cache: t}).success(function (n) {
                f.replaceWith(i(n.trim())(u))
            })
        }
    }
}]).filter("typeaheadHighlight", function () {
    function n(n) {
        return n.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1")
    }

    return function (t, i) {
        return i ? ("" + t).replace(new RegExp(n(i), "gi"), "<strong>$&<\/strong>") : t
    }
});
angular.module("template/accordion/accordion-group.html", []).run(["$templateCache", function (n) {
    n.put("template/accordion/accordion-group.html", '<div class="panel panel-default">\n  <div class="panel-heading">\n    <h4 class="panel-title">\n      <a href class="accordion-toggle" ng-click="toggleOpen()" accordion-transclude="heading"><span ng-class="{\'text-muted\': isDisabled}">{{heading}}<\/span><\/a>\n    <\/h4>\n  <\/div>\n  <div class="panel-collapse" collapse="!isOpen">\n\t  <div class="panel-body" ng-transclude><\/div>\n  <\/div>\n<\/div>\n')
}]);
angular.module("template/accordion/accordion.html", []).run(["$templateCache", function (n) {
    n.put("template/accordion/accordion.html", '<div class="panel-group" ng-transclude><\/div>')
}]);
angular.module("template/alert/alert.html", []).run(["$templateCache", function (n) {
    n.put("template/alert/alert.html", '<div class="alert" ng-class="[\'alert-\' + (type || \'warning\'), closeable ? \'alert-dismissable\' : null]" role="alert">\n    <button ng-show="closeable" type="button" class="close" ng-click="close()">\n        <span aria-hidden="true">&times;<\/span>\n        <span class="sr-only">Close<\/span>\n    <\/button>\n    <div ng-transclude><\/div>\n<\/div>\n')
}]);
angular.module("template/carousel/carousel.html", []).run(["$templateCache", function (n) {
    n.put("template/carousel/carousel.html", '<div ng-mouseenter="pause()" ng-mouseleave="play()" class="carousel" ng-swipe-right="prev()" ng-swipe-left="next()">\n    <ol class="carousel-indicators" ng-show="slides.length > 1">\n        <li ng-repeat="slide in slides track by $index" ng-class="{active: isActive(slide)}" ng-click="select(slide)"><\/li>\n    <\/ol>\n    <div class="carousel-inner" ng-transclude><\/div>\n    <a class="left carousel-control" ng-click="prev()" ng-show="slides.length > 1"><span class="glyphicon glyphicon-chevron-left"><\/span><\/a>\n    <a class="right carousel-control" ng-click="next()" ng-show="slides.length > 1"><span class="glyphicon glyphicon-chevron-right"><\/span><\/a>\n<\/div>\n')
}]);
angular.module("template/carousel/slide.html", []).run(["$templateCache", function (n) {
    n.put("template/carousel/slide.html", "<div ng-class=\"{\n    'active': leaving || (active && !entering),\n    'prev': (next || active) && direction=='prev',\n    'next': (next || active) && direction=='next',\n    'right': direction=='prev',\n    'left': direction=='next'\n  }\" class=\"item text-center\" ng-transclude><\/div>\n")
}]);
angular.module("template/datepicker/datepicker.html", []).run(["$templateCache", function (n) {
    n.put("template/datepicker/datepicker.html", '<div ng-switch="datepickerMode" role="application" ng-keydown="keydown($event)">\n  <daypicker ng-switch-when="day" tabindex="0"><\/daypicker>\n  <monthpicker ng-switch-when="month" tabindex="0"><\/monthpicker>\n  <yearpicker ng-switch-when="year" tabindex="0"><\/yearpicker>\n<\/div>')
}]);
angular.module("template/datepicker/day.html", []).run(["$templateCache", function (n) {
    n.put("template/datepicker/day.html", '<table role="grid" aria-labelledby="{{uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n  <thead>\n    <tr>\n      <th><button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"><\/i><\/button><\/th>\n      <th colspan="{{5 + showWeeks}}"><button id="{{uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm" ng-click="toggleMode()" tabindex="-1" style="width:100%;"><strong>{{title}}<\/strong><\/button><\/th>\n      <th><button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"><\/i><\/button><\/th>\n    <\/tr>\n    <tr>\n      <th ng-show="showWeeks" class="text-center"><\/th>\n      <th ng-repeat="label in labels track by $index" class="text-center"><small aria-label="{{label.full}}">{{label.abbr}}<\/small><\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr ng-repeat="row in rows track by $index">\n      <td ng-show="showWeeks" class="text-center h6"><em>{{ weekNumbers[$index] }}<\/em><\/td>\n      <td ng-repeat="dt in row track by dt.date" class="text-center" role="gridcell" id="{{dt.uid}}" aria-disabled="{{!!dt.disabled}}">\n        <button type="button" style="width:100%;" class="btn btn-default btn-sm" ng-class="{\'btn-info\': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" ng-disabled="dt.disabled" tabindex="-1"><span ng-class="{\'text-muted\': dt.secondary, \'text-info\': dt.current}">{{dt.label}}<\/span><\/button>\n      <\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n')
}]);
angular.module("template/datepicker/month.html", []).run(["$templateCache", function (n) {
    n.put("template/datepicker/month.html", '<table role="grid" aria-labelledby="{{uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n  <thead>\n    <tr>\n      <th><button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"><\/i><\/button><\/th>\n      <th><button id="{{uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm" ng-click="toggleMode()" tabindex="-1" style="width:100%;"><strong>{{title}}<\/strong><\/button><\/th>\n      <th><button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"><\/i><\/button><\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr ng-repeat="row in rows track by $index">\n      <td ng-repeat="dt in row track by dt.date" class="text-center" role="gridcell" id="{{dt.uid}}" aria-disabled="{{!!dt.disabled}}">\n        <button type="button" style="width:100%;" class="btn btn-default" ng-class="{\'btn-info\': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" ng-disabled="dt.disabled" tabindex="-1"><span ng-class="{\'text-info\': dt.current}">{{dt.label}}<\/span><\/button>\n      <\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n')
}]);
angular.module("template/datepicker/popup.html", []).run(["$templateCache", function (n) {
    n.put("template/datepicker/popup.html", '<ul class="dropdown-menu" ng-style="{display: (isOpen && \'block\') || \'none\', top: position.top+\'px\', left: position.left+\'px\'}" ng-keydown="keydown($event)">\n\t<li ng-transclude><\/li>\n\t<li ng-if="showButtonBar" style="padding:10px 9px 2px">\n\t\t<span class="btn-group pull-left">\n\t\t\t<button type="button" class="btn btn-sm btn-info" ng-click="select(\'today\')">{{ getText(\'current\') }}<\/button>\n\t\t\t<button type="button" class="btn btn-sm btn-danger" ng-click="select(null)">{{ getText(\'clear\') }}<\/button>\n\t\t<\/span>\n\t\t<button type="button" class="btn btn-sm btn-success pull-right" ng-click="close()">{{ getText(\'close\') }}<\/button>\n\t<\/li>\n<\/ul>\n')
}]);
angular.module("template/datepicker/year.html", []).run(["$templateCache", function (n) {
    n.put("template/datepicker/year.html", '<table role="grid" aria-labelledby="{{uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n  <thead>\n    <tr>\n      <th><button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"><\/i><\/button><\/th>\n      <th colspan="3"><button id="{{uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm" ng-click="toggleMode()" tabindex="-1" style="width:100%;"><strong>{{title}}<\/strong><\/button><\/th>\n      <th><button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"><\/i><\/button><\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr ng-repeat="row in rows track by $index">\n      <td ng-repeat="dt in row track by dt.date" class="text-center" role="gridcell" id="{{dt.uid}}" aria-disabled="{{!!dt.disabled}}">\n        <button type="button" style="width:100%;" class="btn btn-default" ng-class="{\'btn-info\': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" ng-disabled="dt.disabled" tabindex="-1"><span ng-class="{\'text-info\': dt.current}">{{dt.label}}<\/span><\/button>\n      <\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n')
}]);
angular.module("template/modal/backdrop.html", []).run(["$templateCache", function (n) {
    n.put("template/modal/backdrop.html", '<div class="modal-backdrop fade {{ backdropClass }}"\n     ng-class="{in: animate}"\n     ng-style="{\'z-index\': 1040 + (index && 1 || 0) + index*10}"\n><\/div>\n')
}]);
angular.module("template/modal/window.html", []).run(["$templateCache", function (n) {
    n.put("template/modal/window.html", '<div tabindex="-1" role="dialog" class="modal fade" ng-class="{in: animate}" ng-style="{\'z-index\': 1050 + index*10, display: \'block\'}" ng-click="close($event)">\n    <div class="modal-dialog" ng-class="{\'modal-sm\': size == \'sm\', \'modal-lg\': size == \'lg\'}"><div class="modal-content" modal-transclude><\/div><\/div>\n<\/div>')
}]);
angular.module("template/pagination/pager.html", []).run(["$templateCache", function (n) {
    n.put("template/pagination/pager.html", '<ul class="pager">\n  <li ng-class="{disabled: noPrevious(), previous: align}"><a href ng-click="selectPage(page - 1)">{{getText(\'previous\')}}<\/a><\/li>\n  <li ng-class="{disabled: noNext(), next: align}"><a href ng-click="selectPage(page + 1)">{{getText(\'next\')}}<\/a><\/li>\n<\/ul>')
}]);
angular.module("template/pagination/pagination.html", []).run(["$templateCache", function (n) {
    n.put("template/pagination/pagination.html", '<ul class="pagination">\n  <li ng-if="boundaryLinks" ng-class="{disabled: noPrevious()}"><a href ng-click="selectPage(1)">{{getText(\'first\')}}<\/a><\/li>\n  <li ng-if="directionLinks" ng-class="{disabled: noPrevious()}"><a href ng-click="selectPage(page - 1)">{{getText(\'previous\')}}<\/a><\/li>\n  <li ng-repeat="page in pages track by $index" ng-class="{active: page.active}"><a href ng-click="selectPage(page.number)">{{page.text}}<\/a><\/li>\n  <li ng-if="directionLinks" ng-class="{disabled: noNext()}"><a href ng-click="selectPage(page + 1)">{{getText(\'next\')}}<\/a><\/li>\n  <li ng-if="boundaryLinks" ng-class="{disabled: noNext()}"><a href ng-click="selectPage(totalPages)">{{getText(\'last\')}}<\/a><\/li>\n<\/ul>')
}]);
angular.module("template/tooltip/tooltip-html-unsafe-popup.html", []).run(["$templateCache", function (n) {
    n.put("template/tooltip/tooltip-html-unsafe-popup.html", '<div class="tooltip {{placement}}" ng-class="{ in: isOpen(), fade: animation() }">\n  <div class="tooltip-arrow"><\/div>\n  <div class="tooltip-inner" bind-html-unsafe="content"><\/div>\n<\/div>\n')
}]);
angular.module("template/tooltip/tooltip-popup.html", []).run(["$templateCache", function (n) {
    n.put("template/tooltip/tooltip-popup.html", '<div class="tooltip {{placement}}" ng-class="{ in: isOpen(), fade: animation() }">\n  <div class="tooltip-arrow"><\/div>\n  <div class="tooltip-inner" ng-bind="content"><\/div>\n<\/div>\n')
}]);
angular.module("template/popover/popover.html", []).run(["$templateCache", function (n) {
    n.put("template/popover/popover.html", '<div class="popover {{placement}}" ng-class="{ in: isOpen(), fade: animation() }">\n  <div class="arrow"><\/div>\n\n  <div class="popover-inner">\n      <h3 class="popover-title" ng-bind="title" ng-show="title"><\/h3>\n      <div class="popover-content" ng-bind="content"><\/div>\n  <\/div>\n<\/div>\n')
}]);
angular.module("template/progressbar/bar.html", []).run(["$templateCache", function (n) {
    n.put("template/progressbar/bar.html", '<div class="progress-bar" ng-class="type && \'progress-bar-\' + type" role="progressbar" aria-valuenow="{{value}}" aria-valuemin="0" aria-valuemax="{{max}}" ng-style="{width: percent + \'%\'}" aria-valuetext="{{percent | number:0}}%" ng-transclude><\/div>')
}]);
angular.module("template/progressbar/progress.html", []).run(["$templateCache", function (n) {
    n.put("template/progressbar/progress.html", '<div class="progress" ng-transclude><\/div>')
}]);
angular.module("template/progressbar/progressbar.html", []).run(["$templateCache", function (n) {
    n.put("template/progressbar/progressbar.html", '<div class="progress">\n  <div class="progress-bar" ng-class="type && \'progress-bar-\' + type" role="progressbar" aria-valuenow="{{value}}" aria-valuemin="0" aria-valuemax="{{max}}" ng-style="{width: percent + \'%\'}" aria-valuetext="{{percent | number:0}}%" ng-transclude><\/div>\n<\/div>')
}]);
angular.module("template/rating/rating.html", []).run(["$templateCache", function (n) {
    n.put("template/rating/rating.html", '<span ng-mouseleave="reset()" ng-keydown="onKeydown($event)" tabindex="0" role="slider" aria-valuemin="0" aria-valuemax="{{range.length}}" aria-valuenow="{{value}}">\n    <i ng-repeat="r in range track by $index" ng-mouseenter="enter($index + 1)" ng-click="rate($index + 1)" class="glyphicon" ng-class="$index < value && (r.stateOn || \'glyphicon-star\') || (r.stateOff || \'glyphicon-star-empty\')">\n        <span class="sr-only">({{ $index < value ? \'*\' : \' \' }})<\/span>\n    <\/i>\n<\/span>')
}]);
angular.module("template/tabs/tab.html", []).run(["$templateCache", function (n) {
    n.put("template/tabs/tab.html", '<li ng-class="{active: active, disabled: disabled}">\n  <a href ng-click="select()" tab-heading-transclude>{{heading}}<\/a>\n<\/li>\n')
}]);
angular.module("template/tabs/tabset.html", []).run(["$templateCache", function (n) {
    n.put("template/tabs/tabset.html", '<div>\n  <ul class="nav nav-{{type || \'tabs\'}}" ng-class="{\'nav-stacked\': vertical, \'nav-justified\': justified}" ng-transclude><\/ul>\n  <div class="tab-content">\n    <div class="tab-pane" \n         ng-repeat="tab in tabs" \n         ng-class="{active: tab.active}"\n         tab-content-transclude="tab">\n    <\/div>\n  <\/div>\n<\/div>\n')
}]);
angular.module("template/timepicker/timepicker.html", []).run(["$templateCache", function (n) {
    n.put("template/timepicker/timepicker.html", '<table>\n\t<tbody>\n\t\t<tr class="text-center">\n\t\t\t<td><a ng-click="incrementHours()" class="btn btn-link"><span class="glyphicon glyphicon-chevron-up"><\/span><\/a><\/td>\n\t\t\t<td>&nbsp;<\/td>\n\t\t\t<td><a ng-click="incrementMinutes()" class="btn btn-link"><span class="glyphicon glyphicon-chevron-up"><\/span><\/a><\/td>\n\t\t\t<td ng-show="showMeridian"><\/td>\n\t\t<\/tr>\n\t\t<tr>\n\t\t\t<td style="width:50px;" class="form-group" ng-class="{\'has-error\': invalidHours}">\n\t\t\t\t<input type="text" ng-model="hours" ng-change="updateHours()" class="form-control text-center" ng-mousewheel="incrementHours()" ng-readonly="readonlyInput" maxlength="2">\n\t\t\t<\/td>\n\t\t\t<td>:<\/td>\n\t\t\t<td style="width:50px;" class="form-group" ng-class="{\'has-error\': invalidMinutes}">\n\t\t\t\t<input type="text" ng-model="minutes" ng-change="updateMinutes()" class="form-control text-center" ng-readonly="readonlyInput" maxlength="2">\n\t\t\t<\/td>\n\t\t\t<td ng-show="showMeridian"><button type="button" class="btn btn-default text-center" ng-click="toggleMeridian()">{{meridian}}<\/button><\/td>\n\t\t<\/tr>\n\t\t<tr class="text-center">\n\t\t\t<td><a ng-click="decrementHours()" class="btn btn-link"><span class="glyphicon glyphicon-chevron-down"><\/span><\/a><\/td>\n\t\t\t<td>&nbsp;<\/td>\n\t\t\t<td><a ng-click="decrementMinutes()" class="btn btn-link"><span class="glyphicon glyphicon-chevron-down"><\/span><\/a><\/td>\n\t\t\t<td ng-show="showMeridian"><\/td>\n\t\t<\/tr>\n\t<\/tbody>\n<\/table>\n')
}]);
angular.module("template/typeahead/typeahead-match.html", []).run(["$templateCache", function (n) {
    n.put("template/typeahead/typeahead-match.html", '<a tabindex="-1" bind-html-unsafe="match.label | typeaheadHighlight:query"><\/a>')
}]);
angular.module("template/typeahead/typeahead-popup.html", []).run(["$templateCache", function (n) {
    n.put("template/typeahead/typeahead-popup.html", '<ul class="dropdown-menu" ng-show="isOpen()" ng-style="{top: position.top+\'px\', left: position.left+\'px\'}" style="display: block;" role="listbox" aria-hidden="{{!isOpen()}}">\n    <li ng-repeat="match in matches track by $index" ng-class="{active: isActive($index) }" ng-mouseenter="selectActive($index)" ng-click="selectMatch($index)" role="option" id="{{match.id}}">\n        <div typeahead-match index="$index" match="match" query="query" template-url="templateUrl"><\/div>\n    <\/li>\n<\/ul>\n')
}]);
angular.module("ui.bootstrap", ["ui.bootstrap.transition", "ui.bootstrap.collapse", "ui.bootstrap.accordion", "ui.bootstrap.alert", "ui.bootstrap.bindHtml", "ui.bootstrap.buttons", "ui.bootstrap.carousel", "ui.bootstrap.dateparser", "ui.bootstrap.position", "ui.bootstrap.datepicker", "ui.bootstrap.dropdown", "ui.bootstrap.modal", "ui.bootstrap.pagination", "ui.bootstrap.tooltip", "ui.bootstrap.popover", "ui.bootstrap.progressbar", "ui.bootstrap.rating", "ui.bootstrap.tabs", "ui.bootstrap.timepicker", "ui.bootstrap.typeahead"]);
angular.module("ui.bootstrap.transition", []).factory("$transition", ["$q", "$timeout", "$rootScope", function (n, t, i) {
    function u(n) {
        for (var t in n)if (void 0 !== f.style[t])return n[t]
    }

    var r = function (u, f, e) {
        e = e || {};
        var s = n.defer(), o = r[e.animation ? "animationEndEventName" : "transitionEndEventName"], h = function () {
            i.$apply(function () {
                u.unbind(o, h);
                s.resolve(u)
            })
        };
        return o && u.bind(o, h), t(function () {
            angular.isString(f) ? u.addClass(f) : angular.isFunction(f) ? f(u) : angular.isObject(f) && u.css(f);
            o || s.resolve(u)
        }), s.promise.cancel = function () {
            o && u.unbind(o, h);
            s.reject("Transition cancelled")
        }, s.promise
    }, f = document.createElement("trans");
    return r.transitionEndEventName = u({
        WebkitTransition: "webkitTransitionEnd",
        MozTransition: "transitionend",
        OTransition: "oTransitionEnd",
        transition: "transitionend"
    }), r.animationEndEventName = u({
        WebkitTransition: "webkitAnimationEnd",
        MozTransition: "animationend",
        OTransition: "oAnimationEnd",
        transition: "animationend"
    }), r
}]);
angular.module("ui.bootstrap.collapse", ["ui.bootstrap.transition"]).directive("collapse", ["$transition", function (n) {
    return {
        link: function (t, i, r) {
            function e(t) {
                function f() {
                    u === r && (u = void 0)
                }

                var r = n(i, t);
                return u && u.cancel(), u = r, r.then(f, f), r
            }

            function h() {
                f ? (f = !1, o()) : (i.removeClass("collapse").addClass("collapsing"), e({height: i[0].scrollHeight + "px"}).then(o))
            }

            function o() {
                i.removeClass("collapsing");
                i.addClass("collapse in");
                i.css({height: "auto"})
            }

            function c() {
                f ? (f = !1, s(), i.css({height: 0})) : (i.css({height: i[0].scrollHeight + "px"}), i[0].offsetWidth, i.removeClass("collapse in").addClass("collapsing"), e({height: 0}).then(s))
            }

            function s() {
                i.removeClass("collapsing");
                i.addClass("collapse")
            }

            var u, f = !0;
            t.$watch(r.collapse, function (n) {
                n ? c() : h()
            })
        }
    }
}]);
angular.module("ui.bootstrap.accordion", ["ui.bootstrap.collapse"]).constant("accordionConfig", {closeOthers: !0}).controller("AccordionController", ["$scope", "$attrs", "accordionConfig", function (n, t, i) {
    this.groups = [];
    this.closeOthers = function (r) {
        var u = angular.isDefined(t.closeOthers) ? n.$eval(t.closeOthers) : i.closeOthers;
        u && angular.forEach(this.groups, function (n) {
            n !== r && (n.isOpen = !1)
        })
    };
    this.addGroup = function (n) {
        var t = this;
        this.groups.push(n);
        n.$on("$destroy", function () {
            t.removeGroup(n)
        })
    };
    this.removeGroup = function (n) {
        var t = this.groups.indexOf(n);
        -1 !== t && this.groups.splice(t, 1)
    }
}]).directive("accordion", function () {
    return {
        restrict: "EA",
        controller: "AccordionController",
        transclude: !0,
        replace: !1,
        templateUrl: "template/accordion/accordion.html"
    }
}).directive("accordionGroup", function () {
    return {
        require: "^accordion",
        restrict: "EA",
        transclude: !0,
        replace: !0,
        templateUrl: "template/accordion/accordion-group.html",
        scope: {heading: "@", isOpen: "=?", isDisabled: "=?"},
        controller: function () {
            this.setHeading = function (n) {
                this.heading = n
            }
        },
        link: function (n, t, i, r) {
            r.addGroup(n);
            n.$watch("isOpen", function (t) {
                t && r.closeOthers(n)
            });
            n.toggleOpen = function () {
                n.isDisabled || (n.isOpen = !n.isOpen)
            }
        }
    }
}).directive("accordionHeading", function () {
    return {
        restrict: "EA",
        transclude: !0,
        template: "",
        replace: !0,
        require: "^accordionGroup",
        link: function (n, t, i, r, u) {
            r.setHeading(u(n, function () {
            }))
        }
    }
}).directive("accordionTransclude", function () {
    return {
        require: "^accordionGroup", link: function (n, t, i, r) {
            n.$watch(function () {
                return r[i.accordionTransclude]
            }, function (n) {
                n && (t.html(""), t.append(n))
            })
        }
    }
});
angular.module("ui.bootstrap.alert", []).controller("AlertController", ["$scope", "$attrs", function (n, t) {
    n.closeable = "close" in t;
    this.close = n.close
}]).directive("alert", function () {
    return {
        restrict: "EA",
        controller: "AlertController",
        templateUrl: "template/alert/alert.html",
        transclude: !0,
        replace: !0,
        scope: {type: "@", close: "&"}
    }
}).directive("dismissOnTimeout", ["$timeout", function (n) {
    return {
        require: "alert", link: function (t, i, r, u) {
            n(function () {
                u.close()
            }, parseInt(r.dismissOnTimeout, 10))
        }
    }
}]);
angular.module("ui.bootstrap.bindHtml", []).directive("bindHtmlUnsafe", function () {
    return function (n, t, i) {
        t.addClass("ng-binding").data("$binding", i.bindHtmlUnsafe);
        n.$watch(i.bindHtmlUnsafe, function (n) {
            t.html(n || "")
        })
    }
});
angular.module("ui.bootstrap.buttons", []).constant("buttonConfig", {
    activeClass: "active",
    toggleEvent: "click"
}).controller("ButtonsController", ["buttonConfig", function (n) {
    this.activeClass = n.activeClass || "active";
    this.toggleEvent = n.toggleEvent || "click"
}]).directive("btnRadio", function () {
    return {
        require: ["btnRadio", "ngModel"], controller: "ButtonsController", link: function (n, t, i, r) {
            var f = r[0], u = r[1];
            u.$render = function () {
                t.toggleClass(f.activeClass, angular.equals(u.$modelValue, n.$eval(i.btnRadio)))
            };
            t.bind(f.toggleEvent, function () {
                var r = t.hasClass(f.activeClass);
                (!r || angular.isDefined(i.uncheckable)) && n.$apply(function () {
                    u.$setViewValue(r ? null : n.$eval(i.btnRadio));
                    u.$render()
                })
            })
        }
    }
}).directive("btnCheckbox", function () {
    return {
        require: ["btnCheckbox", "ngModel"], controller: "ButtonsController", link: function (n, t, i, r) {
            function e() {
                return o(i.btnCheckboxTrue, !0)
            }

            function s() {
                return o(i.btnCheckboxFalse, !1)
            }

            function o(t, i) {
                var r = n.$eval(t);
                return angular.isDefined(r) ? r : i
            }

            var f = r[0], u = r[1];
            u.$render = function () {
                t.toggleClass(f.activeClass, angular.equals(u.$modelValue, e()))
            };
            t.bind(f.toggleEvent, function () {
                n.$apply(function () {
                    u.$setViewValue(t.hasClass(f.activeClass) ? s() : e());
                    u.$render()
                })
            })
        }
    }
});
angular.module("ui.bootstrap.carousel", ["ui.bootstrap.transition"]).controller("CarouselController", ["$scope", "$timeout", "$interval", "$transition", function (n, t, i, r) {
    function h() {
        c();
        var t = +n.interval;
        !isNaN(t) && t > 0 && (o = i(a, t))
    }

    function c() {
        o && (i.cancel(o), o = null)
    }

    function a() {
        var t = +n.interval;
        s && !isNaN(t) && t > 0 ? n.next() : n.pause()
    }

    var o, s, f = this, u = f.slides = n.slides = [], e = -1, l;
    f.currentSlide = null;
    l = !1;
    f.select = n.select = function (i, o) {
        function c() {
            l || (f.currentSlide && angular.isString(o) && !n.noTransition && i.$element ? (i.$element.addClass(o), i.$element[0].offsetWidth, angular.forEach(u, function (n) {
                    angular.extend(n, {direction: "", entering: !1, leaving: !1, active: !1})
                }), angular.extend(i, {
                    direction: o,
                    active: !0,
                    entering: !0
                }), angular.extend(f.currentSlide || {}, {
                    direction: o,
                    leaving: !0
                }), n.$currentTransition = r(i.$element, {}), function (t, i) {
                    n.$currentTransition.then(function () {
                        s(t, i)
                    }, function () {
                        s(t, i)
                    })
                }(i, f.currentSlide)) : s(i, f.currentSlide), f.currentSlide = i, e = a, h())
        }

        function s(t, i) {
            angular.extend(t, {direction: "", active: !0, leaving: !1, entering: !1});
            angular.extend(i || {}, {direction: "", active: !1, leaving: !1, entering: !1});
            n.$currentTransition = null
        }

        var a = u.indexOf(i);
        void 0 === o && (o = a > e ? "next" : "prev");
        i && i !== f.currentSlide && (n.$currentTransition ? (n.$currentTransition.cancel(), t(c)) : c())
    };
    n.$on("$destroy", function () {
        l = !0
    });
    f.indexOfSlide = function (n) {
        return u.indexOf(n)
    };
    n.next = function () {
        var t = (e + 1) % u.length;
        if (!n.$currentTransition)return f.select(u[t], "next")
    };
    n.prev = function () {
        var t = 0 > e - 1 ? u.length - 1 : e - 1;
        if (!n.$currentTransition)return f.select(u[t], "prev")
    };
    n.isActive = function (n) {
        return f.currentSlide === n
    };
    n.$watch("interval", h);
    n.$on("$destroy", c);
    n.play = function () {
        s || (s = !0, h())
    };
    n.pause = function () {
        n.noPause || (s = !1, c())
    };
    f.addSlide = function (t, i) {
        t.$element = i;
        u.push(t);
        1 === u.length || t.active ? (f.select(u[u.length - 1]), 1 == u.length && n.play()) : t.active = !1
    };
    f.removeSlide = function (n) {
        var t = u.indexOf(n);
        u.splice(t, 1);
        u.length > 0 && n.active ? f.select(t >= u.length ? u[t - 1] : u[t]) : e > t && e--
    }
}]).directive("carousel", [function () {
    return {
        restrict: "EA",
        transclude: !0,
        replace: !0,
        controller: "CarouselController",
        require: "carousel",
        templateUrl: "template/carousel/carousel.html",
        scope: {interval: "=", noTransition: "=", noPause: "="}
    }
}]).directive("slide", function () {
    return {
        require: "^carousel",
        restrict: "EA",
        transclude: !0,
        replace: !0,
        templateUrl: "template/carousel/slide.html",
        scope: {active: "=?"},
        link: function (n, t, i, r) {
            r.addSlide(n, t);
            n.$on("$destroy", function () {
                r.removeSlide(n)
            });
            n.$watch("active", function (t) {
                t && r.select(n)
            })
        }
    }
});
angular.module("ui.bootstrap.dateparser", []).service("dateParser", ["$locale", "orderByFilter", function (n, t) {
    function i(n) {
        var r = [], i = n.split("");
        return angular.forEach(u, function (t, u) {
            var f = n.indexOf(u), e, o;
            if (f > -1) {
                for (n = n.split(""), i[f] = "(" + t.regex + ")", n[f] = "$", e = f + 1, o = f + u.length; o > e; e++)i[e] = "", n[e] = "$";
                n = n.join("");
                r.push({index: f, apply: t.apply})
            }
        }), {regex: new RegExp("^" + i.join("") + "$"), map: t(r, "index")}
    }

    function r(n, t, i) {
        return 1 === t && i > 28 ? 29 === i && (n % 4 == 0 && n % 100 != 0 || n % 400 == 0) : 3 === t || 5 === t || 8 === t || 10 === t ? 31 > i : !0
    }

    this.parsers = {};
    var u = {
        yyyy: {
            regex: "\\d{4}", apply: function (n) {
                this.year = +n
            }
        }, yy: {
            regex: "\\d{2}", apply: function (n) {
                this.year = +n + 2e3
            }
        }, y: {
            regex: "\\d{1,4}", apply: function (n) {
                this.year = +n
            }
        }, MMMM: {
            regex: n.DATETIME_FORMATS.MONTH.join("|"), apply: function (t) {
                this.month = n.DATETIME_FORMATS.MONTH.indexOf(t)
            }
        }, MMM: {
            regex: n.DATETIME_FORMATS.SHORTMONTH.join("|"), apply: function (t) {
                this.month = n.DATETIME_FORMATS.SHORTMONTH.indexOf(t)
            }
        }, MM: {
            regex: "0[1-9]|1[0-2]", apply: function (n) {
                this.month = n - 1
            }
        }, M: {
            regex: "[1-9]|1[0-2]", apply: function (n) {
                this.month = n - 1
            }
        }, dd: {
            regex: "[0-2][0-9]{1}|3[0-1]{1}", apply: function (n) {
                this.date = +n
            }
        }, d: {
            regex: "[1-2]?[0-9]{1}|3[0-1]{1}", apply: function (n) {
                this.date = +n
            }
        }, EEEE: {regex: n.DATETIME_FORMATS.DAY.join("|")}, EEE: {regex: n.DATETIME_FORMATS.SHORTDAY.join("|")}
    };
    this.parse = function (t, u) {
        var s;
        if (!angular.isString(t) || !u)return t;
        u = n.DATETIME_FORMATS[u] || u;
        this.parsers[u] || (this.parsers[u] = i(u));
        var h = this.parsers[u], l = h.regex, a = h.map, e = t.match(l);
        if (e && e.length) {
            for (var c, f = {
                year: 1900,
                month: 0,
                date: 1,
                hours: 0
            }, o = 1, v = e.length; v > o; o++)s = a[o - 1], s.apply && s.apply.call(f, e[o]);
            return r(f.year, f.month, f.date) && (c = new Date(f.year, f.month, f.date, f.hours)), c
        }
    }
}]);
angular.module("ui.bootstrap.position", []).factory("$position", ["$document", "$window", function (n, t) {
    function i(n, i) {
        return n.currentStyle ? n.currentStyle[i] : t.getComputedStyle ? t.getComputedStyle(n)[i] : n.style[i]
    }

    function r(n) {
        return "static" === (i(n, "position") || "static")
    }

    var u = function (t) {
        for (var u = n[0], i = t.offsetParent || u; i && i !== u && r(i);)i = i.offsetParent;
        return i || u
    };
    return {
        position: function (t) {
            var e = this.offset(t), r = {top: 0, left: 0}, i = u(t[0]), f;
            return i != n[0] && (r = this.offset(angular.element(i)), r.top += i.clientTop - i.scrollTop, r.left += i.clientLeft - i.scrollLeft), f = t[0].getBoundingClientRect(), {
                width: f.width || t.prop("offsetWidth"),
                height: f.height || t.prop("offsetHeight"),
                top: e.top - r.top,
                left: e.left - r.left
            }
        }, offset: function (i) {
            var r = i[0].getBoundingClientRect();
            return {
                width: r.width || i.prop("offsetWidth"),
                height: r.height || i.prop("offsetHeight"),
                top: r.top + (t.pageYOffset || n[0].documentElement.scrollTop),
                left: r.left + (t.pageXOffset || n[0].documentElement.scrollLeft)
            }
        }, positionElements: function (n, t, i, r) {
            var u, h, c, f, a = i.split("-"), l = a[0], e = a[1] || "center", o, s;
            u = r ? this.offset(n) : this.position(n);
            h = t.prop("offsetWidth");
            c = t.prop("offsetHeight");
            o = {
                center: function () {
                    return u.left + u.width / 2 - h / 2
                }, left: function () {
                    return u.left
                }, right: function () {
                    return u.left + u.width
                }
            };
            s = {
                center: function () {
                    return u.top + u.height / 2 - c / 2
                }, top: function () {
                    return u.top
                }, bottom: function () {
                    return u.top + u.height
                }
            };
            switch (l) {
                case"right":
                    f = {top: s[e](), left: o[l]()};
                    break;
                case"left":
                    f = {top: s[e](), left: u.left - h};
                    break;
                case"bottom":
                    f = {top: s[l](), left: o[e]()};
                    break;
                default:
                    f = {top: u.top - c, left: o[e]()}
            }
            return f
        }
    }
}]);
angular.module("ui.bootstrap.datepicker", ["ui.bootstrap.dateparser", "ui.bootstrap.position"]).constant("datepickerConfig", {
    formatDay: "dd",
    formatMonth: "MMMM",
    formatYear: "yyyy",
    formatDayHeader: "EEE",
    formatDayTitle: "MMMM yyyy",
    formatMonthTitle: "yyyy",
    datepickerMode: "day",
    minMode: "day",
    maxMode: "year",
    showWeeks: !0,
    startingDay: 0,
    yearRange: 20,
    minDate: null,
    maxDate: null
}).controller("DatepickerController", ["$scope", "$attrs", "$parse", "$interpolate", "$timeout", "$log", "dateFilter", "datepickerConfig", function (n, t, i, r, u, f, e, o) {
    var s = this, h = {$setViewValue: angular.noop}, c;
    this.modes = ["day", "month", "year"];
    angular.forEach(["formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "minMode", "maxMode", "showWeeks", "startingDay", "yearRange"], function (i, u) {
        s[i] = angular.isDefined(t[i]) ? 8 > u ? r(t[i])(n.$parent) : n.$parent.$eval(t[i]) : o[i]
    });
    angular.forEach(["minDate", "maxDate"], function (r) {
        t[r] ? n.$parent.$watch(i(t[r]), function (n) {
                s[r] = n ? new Date(n) : null;
                s.refreshView()
            }) : s[r] = o[r] ? new Date(o[r]) : null
    });
    n.datepickerMode = n.datepickerMode || o.datepickerMode;
    n.uniqueId = "datepicker-" + n.$id + "-" + Math.floor(1e4 * Math.random());
    this.activeDate = angular.isDefined(t.initDate) ? n.$parent.$eval(t.initDate) : new Date;
    n.isActive = function (t) {
        return 0 === s.compare(t.date, s.activeDate) ? (n.activeDateId = t.uid, !0) : !1
    };
    this.init = function (n) {
        h = n;
        h.$render = function () {
            s.render()
        }
    };
    this.render = function () {
        if (h.$modelValue) {
            var n = new Date(h.$modelValue), t = !isNaN(n);
            t ? this.activeDate = n : f.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');
            h.$setValidity("date", t)
        }
        this.refreshView()
    };
    this.refreshView = function () {
        if (this.element) {
            this._refreshView();
            var n = h.$modelValue ? new Date(h.$modelValue) : null;
            h.$setValidity("date-disabled", !n || this.element && !this.isDisabled(n))
        }
    };
    this.createDateObject = function (n, t) {
        var i = h.$modelValue ? new Date(h.$modelValue) : null;
        return {
            date: n,
            label: e(n, t),
            selected: i && 0 === this.compare(n, i),
            disabled: this.isDisabled(n),
            current: 0 === this.compare(n, new Date)
        }
    };
    this.isDisabled = function (i) {
        return this.minDate && this.compare(i, this.minDate) < 0 || this.maxDate && this.compare(i, this.maxDate) > 0 || t.dateDisabled && n.dateDisabled({
                date: i,
                mode: n.datepickerMode
            })
    };
    this.split = function (n, t) {
        for (var i = []; n.length > 0;)i.push(n.splice(0, t));
        return i
    };
    n.select = function (t) {
        if (n.datepickerMode === s.minMode) {
            var i = h.$modelValue ? new Date(h.$modelValue) : new Date(0, 0, 0, 0, 0, 0, 0);
            i.setFullYear(t.getFullYear(), t.getMonth(), t.getDate());
            h.$setViewValue(i);
            h.$render()
        } else s.activeDate = t, n.datepickerMode = s.modes[s.modes.indexOf(n.datepickerMode) - 1]
    };
    n.move = function (n) {
        var t = s.activeDate.getFullYear() + n * (s.step.years || 0), i = s.activeDate.getMonth() + n * (s.step.months || 0);
        s.activeDate.setFullYear(t, i, 1);
        s.refreshView()
    };
    n.toggleMode = function (t) {
        t = t || 1;
        n.datepickerMode === s.maxMode && 1 === t || n.datepickerMode === s.minMode && -1 === t || (n.datepickerMode = s.modes[s.modes.indexOf(n.datepickerMode) + t])
    };
    n.keys = {
        13: "enter",
        32: "space",
        33: "pageup",
        34: "pagedown",
        35: "end",
        36: "home",
        37: "left",
        38: "up",
        39: "right",
        40: "down"
    };
    c = function () {
        u(function () {
            s.element[0].focus()
        }, 0, !1)
    };
    n.$on("datepicker.focus", c);
    n.keydown = function (t) {
        var i = n.keys[t.which];
        if (i && !t.shiftKey && !t.altKey)if (t.preventDefault(), t.stopPropagation(), "enter" === i || "space" === i) {
            if (s.isDisabled(s.activeDate))return;
            n.select(s.activeDate);
            c()
        } else!t.ctrlKey || "up" !== i && "down" !== i ? (s.handleKeyDown(i, t), s.refreshView()) : (n.toggleMode("up" === i ? 1 : -1), c())
    }
}]).directive("datepicker", function () {
    return {
        restrict: "EA",
        replace: !0,
        templateUrl: "template/datepicker/datepicker.html",
        scope: {datepickerMode: "=?", dateDisabled: "&"},
        require: ["datepicker", "?^ngModel"],
        controller: "DatepickerController",
        link: function (n, t, i, r) {
            var f = r[0], u = r[1];
            u && f.init(u)
        }
    }
}).directive("daypicker", ["dateFilter", function (n) {
    return {
        restrict: "EA",
        replace: !0,
        templateUrl: "template/datepicker/day.html",
        require: "^datepicker",
        link: function (t, i, r, u) {
            function f(n, t) {
                return 1 !== t || n % 4 != 0 || n % 100 == 0 && n % 400 != 0 ? s[t] : 29
            }

            function e(n, t) {
                var r = new Array(t), i = new Date(n), u = 0;
                for (i.setHours(12); t > u;)r[u++] = new Date(i), i.setDate(i.getDate() + 1);
                return r
            }

            function o(n) {
                var t = new Date(n), i;
                return t.setDate(t.getDate() + 4 - (t.getDay() || 7)), i = t.getTime(), t.setMonth(0), t.setDate(1), Math.floor(Math.round((i - t) / 864e5) / 7) + 1
            }

            t.showWeeks = u.showWeeks;
            u.step = {months: 1};
            u.element = i;
            var s = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
            u._refreshView = function () {
                var p = u.activeDate.getFullYear(), h = u.activeDate.getMonth(), c = new Date(p, h, 1), s = u.startingDay - c.getDay(), l = s > 0 ? 7 - s : -s, a = new Date(c), i, r, f, v, y;
                for (l > 0 && a.setDate(-l + 1), i = e(a, 42), r = 0; 42 > r; r++)i[r] = angular.extend(u.createDateObject(i[r], u.formatDay), {
                    secondary: i[r].getMonth() !== h,
                    uid: t.uniqueId + "-" + r
                });
                for (t.labels = new Array(7), f = 0; 7 > f; f++)t.labels[f] = {
                    abbr: n(i[f].date, u.formatDayHeader),
                    full: n(i[f].date, "EEEE")
                };
                if (t.title = n(u.activeDate, u.formatDayTitle), t.rows = u.split(i, 7), t.showWeeks)for (t.weekNumbers = [], v = o(t.rows[0][0].date), y = t.rows.length; t.weekNumbers.push(v++) < y;);
            };
            u.compare = function (n, t) {
                return new Date(n.getFullYear(), n.getMonth(), n.getDate()) - new Date(t.getFullYear(), t.getMonth(), t.getDate())
            };
            u.handleKeyDown = function (n) {
                var t = u.activeDate.getDate(), i;
                "left" === n ? t -= 1 : "up" === n ? t -= 7 : "right" === n ? t += 1 : "down" === n ? t += 7 : "pageup" === n || "pagedown" === n ? (i = u.activeDate.getMonth() + ("pageup" === n ? -1 : 1), u.activeDate.setMonth(i, 1), t = Math.min(f(u.activeDate.getFullYear(), u.activeDate.getMonth()), t)) : "home" === n ? t = 1 : "end" === n && (t = f(u.activeDate.getFullYear(), u.activeDate.getMonth()));
                u.activeDate.setDate(t)
            };
            u.refreshView()
        }
    }
}]).directive("monthpicker", ["dateFilter", function (n) {
    return {
        restrict: "EA",
        replace: !0,
        templateUrl: "template/datepicker/month.html",
        require: "^datepicker",
        link: function (t, i, r, u) {
            u.step = {years: 1};
            u.element = i;
            u._refreshView = function () {
                for (var r = new Array(12), f = u.activeDate.getFullYear(), i = 0; 12 > i; i++)r[i] = angular.extend(u.createDateObject(new Date(f, i, 1), u.formatMonth), {uid: t.uniqueId + "-" + i});
                t.title = n(u.activeDate, u.formatMonthTitle);
                t.rows = u.split(r, 3)
            };
            u.compare = function (n, t) {
                return new Date(n.getFullYear(), n.getMonth()) - new Date(t.getFullYear(), t.getMonth())
            };
            u.handleKeyDown = function (n) {
                var t = u.activeDate.getMonth(), i;
                "left" === n ? t -= 1 : "up" === n ? t -= 3 : "right" === n ? t += 1 : "down" === n ? t += 3 : "pageup" === n || "pagedown" === n ? (i = u.activeDate.getFullYear() + ("pageup" === n ? -1 : 1), u.activeDate.setFullYear(i)) : "home" === n ? t = 0 : "end" === n && (t = 11);
                u.activeDate.setMonth(t)
            };
            u.refreshView()
        }
    }
}]).directive("yearpicker", ["dateFilter", function () {
    return {
        restrict: "EA",
        replace: !0,
        templateUrl: "template/datepicker/year.html",
        require: "^datepicker",
        link: function (n, t, i, r) {
            function f(n) {
                return parseInt((n - 1) / u, 10) * u + 1
            }

            var u = r.yearRange;
            r.step = {years: u};
            r.element = t;
            r._refreshView = function () {
                for (var i = new Array(u), t = 0, e = f(r.activeDate.getFullYear()); u > t; t++)i[t] = angular.extend(r.createDateObject(new Date(e + t, 0, 1), r.formatYear), {uid: n.uniqueId + "-" + t});
                n.title = [i[0].label, i[u - 1].label].join(" - ");
                n.rows = r.split(i, 5)
            };
            r.compare = function (n, t) {
                return n.getFullYear() - t.getFullYear()
            };
            r.handleKeyDown = function (n) {
                var t = r.activeDate.getFullYear();
                "left" === n ? t -= 1 : "up" === n ? t -= 5 : "right" === n ? t += 1 : "down" === n ? t += 5 : "pageup" === n || "pagedown" === n ? t += ("pageup" === n ? -1 : 1) * r.step.years : "home" === n ? t = f(r.activeDate.getFullYear()) : "end" === n && (t = f(r.activeDate.getFullYear()) + u - 1);
                r.activeDate.setFullYear(t)
            };
            r.refreshView()
        }
    }
}]).constant("datepickerPopupConfig", {
    datepickerPopup: "yyyy-MM-dd",
    currentText: "Today",
    clearText: "Clear",
    closeText: "Done",
    closeOnDateSelection: !0,
    appendToBody: !1,
    showButtonBar: !0
}).directive("datepickerPopup", ["$compile", "$parse", "$document", "$position", "dateFilter", "dateParser", "datepickerPopupConfig", function (n, t, i, r, u, f, e) {
    return {
        restrict: "EA",
        require: "ngModel",
        scope: {isOpen: "=?", currentText: "@", clearText: "@", closeText: "@", dateDisabled: "&"},
        link: function (o, s, h, c) {
            function b(n) {
                return n.replace(/([A-Z])/g, function (n) {
                    return "-" + n.toLowerCase()
                })
            }

            function k(n) {
                if (n) {
                    if (angular.isDate(n) && !isNaN(n))return c.$setValidity("date", !0), n;
                    if (angular.isString(n)) {
                        var t = f.parse(n, p) || new Date(n);
                        return isNaN(t) ? void c.$setValidity("date", !1) : (c.$setValidity("date", !0), t)
                    }
                    return void c.$setValidity("date", !1)
                }
                return c.$setValidity("date", !0), null
            }

            var p, g = angular.isDefined(h.closeOnDateSelection) ? o.$parent.$eval(h.closeOnDateSelection) : e.closeOnDateSelection, d = angular.isDefined(h.datepickerAppendToBody) ? o.$parent.$eval(h.datepickerAppendToBody) : e.appendToBody, l, a, v, w, y;
            o.showButtonBar = angular.isDefined(h.showButtonBar) ? o.$parent.$eval(h.showButtonBar) : e.showButtonBar;
            o.getText = function (n) {
                return o[n + "Text"] || e[n + "Text"]
            };
            h.$observe("datepickerPopup", function (n) {
                p = n || e.datepickerPopup;
                c.$render()
            });
            l = angular.element("<div datepicker-popup-wrap><div datepicker><\/div><\/div>");
            l.attr({"ng-model": "date", "ng-change": "dateSelection()"});
            a = angular.element(l.children()[0]);
            h.datepickerOptions && angular.forEach(o.$parent.$eval(h.datepickerOptions), function (n, t) {
                a.attr(b(t), n)
            });
            o.watchData = {};
            angular.forEach(["minDate", "maxDate", "datepickerMode"], function (n) {
                var i, r;
                h[n] && (i = t(h[n]), (o.$parent.$watch(i, function (t) {
                    o.watchData[n] = t
                }), a.attr(b(n), "watchData." + n), "datepickerMode" === n) && (r = i.assign, o.$watch("watchData." + n, function (n, t) {
                    n !== t && r(o.$parent, n)
                })))
            });
            h.dateDisabled && a.attr("date-disabled", "dateDisabled({ date: date, mode: mode })");
            c.$parsers.unshift(k);
            o.dateSelection = function (n) {
                angular.isDefined(n) && (o.date = n);
                c.$setViewValue(o.date);
                c.$render();
                g && (o.isOpen = !1, s[0].focus())
            };
            s.bind("input change keyup", function () {
                o.$apply(function () {
                    o.date = c.$modelValue
                })
            });
            c.$render = function () {
                var n = c.$viewValue ? u(c.$viewValue, p) : "";
                s.val(n);
                o.date = k(c.$modelValue)
            };
            v = function (n) {
                o.isOpen && n.target !== s[0] && o.$apply(function () {
                    o.isOpen = !1
                })
            };
            w = function (n) {
                o.keydown(n)
            };
            s.bind("keydown", w);
            o.keydown = function (n) {
                27 === n.which ? (n.preventDefault(), n.stopPropagation(), o.close()) : 40 !== n.which || o.isOpen || (o.isOpen = !0)
            };
            o.$watch("isOpen", function (n) {
                n ? (o.$broadcast("datepicker.focus"), o.position = d ? r.offset(s) : r.position(s), o.position.top = o.position.top + s.prop("offsetHeight"), i.bind("click", v)) : i.unbind("click", v)
            });
            o.select = function (n) {
                if ("today" === n) {
                    var t = new Date;
                    angular.isDate(c.$modelValue) ? (n = new Date(c.$modelValue), n.setFullYear(t.getFullYear(), t.getMonth(), t.getDate())) : n = new Date(t.setHours(0, 0, 0, 0))
                }
                o.dateSelection(n)
            };
            o.close = function () {
                o.isOpen = !1;
                s[0].focus()
            };
            y = n(l)(o);
            l.remove();
            d ? i.find("body").append(y) : s.after(y);
            o.$on("$destroy", function () {
                y.remove();
                s.unbind("keydown", w);
                i.unbind("click", v)
            })
        }
    }
}]).directive("datepickerPopupWrap", function () {
    return {
        restrict: "EA",
        replace: !0,
        transclude: !0,
        templateUrl: "template/datepicker/popup.html",
        link: function (n, t) {
            t.bind("click", function (n) {
                n.preventDefault();
                n.stopPropagation()
            })
        }
    }
});
angular.module("ui.bootstrap.dropdown", []).constant("dropdownConfig", {openClass: "open"}).service("dropdownService", ["$document", function (n) {
    var t = null, i, r;
    this.open = function (u) {
        t || (n.bind("click", i), n.bind("keydown", r));
        t && t !== u && (t.isOpen = !1);
        t = u
    };
    this.close = function (u) {
        t === u && (t = null, n.unbind("click", i), n.unbind("keydown", r))
    };
    i = function (n) {
        if (t) {
            var i = t.getToggleElement();
            n && i && i[0].contains(n.target) || t.$apply(function () {
                t.isOpen = !1
            })
        }
    };
    r = function (n) {
        27 === n.which && (t.focusToggleElement(), i())
    }
}]).controller("DropdownController", ["$scope", "$attrs", "$parse", "dropdownConfig", "dropdownService", "$animate", function (n, t, i, r, u, f) {
    var s, o = this, e = n.$new(), c = r.openClass, h = angular.noop, l = t.onToggle ? i(t.onToggle) : angular.noop;
    this.init = function (r) {
        o.$element = r;
        t.isOpen && (s = i(t.isOpen), h = s.assign, n.$watch(s, function (n) {
            e.isOpen = !!n
        }))
    };
    this.toggle = function (n) {
        return e.isOpen = arguments.length ? !!n : !e.isOpen
    };
    this.isOpen = function () {
        return e.isOpen
    };
    e.getToggleElement = function () {
        return o.toggleElement
    };
    e.focusToggleElement = function () {
        o.toggleElement && o.toggleElement[0].focus()
    };
    e.$watch("isOpen", function (t, i) {
        f[t ? "addClass" : "removeClass"](o.$element, c);
        t ? (e.focusToggleElement(), u.open(e)) : u.close(e);
        h(n, t);
        angular.isDefined(t) && t !== i && l(n, {open: !!t})
    });
    n.$on("$locationChangeSuccess", function () {
        e.isOpen = !1
    });
    n.$on("$destroy", function () {
        e.$destroy()
    })
}]).directive("dropdown", function () {
    return {
        controller: "DropdownController", link: function (n, t, i, r) {
            r.init(t)
        }
    }
}).directive("dropdownToggle", function () {
    return {
        require: "?^dropdown", link: function (n, t, i, r) {
            if (r) {
                r.toggleElement = t;
                var u = function (u) {
                    u.preventDefault();
                    t.hasClass("disabled") || i.disabled || n.$apply(function () {
                        r.toggle()
                    })
                };
                t.bind("click", u);
                t.attr({"aria-haspopup": !0, "aria-expanded": !1});
                n.$watch(r.isOpen, function (n) {
                    t.attr("aria-expanded", !!n)
                });
                n.$on("$destroy", function () {
                    t.unbind("click", u)
                })
            }
        }
    }
});
angular.module("ui.bootstrap.modal", ["ui.bootstrap.transition"]).factory("$$stackedMap", function () {
    return {
        createNew: function () {
            var n = [];
            return {
                add: function (t, i) {
                    n.push({key: t, value: i})
                }, get: function (t) {
                    for (var i = 0; i < n.length; i++)if (t == n[i].key)return n[i]
                }, keys: function () {
                    for (var i = [], t = 0; t < n.length; t++)i.push(n[t].key);
                    return i
                }, top: function () {
                    return n[n.length - 1]
                }, remove: function (t) {
                    for (var r = -1, i = 0; i < n.length; i++)if (t == n[i].key) {
                        r = i;
                        break
                    }
                    return n.splice(r, 1)[0]
                }, removeTop: function () {
                    return n.splice(n.length - 1, 1)[0]
                }, length: function () {
                    return n.length
                }
            }
        }
    }
}).directive("modalBackdrop", ["$timeout", function (n) {
    return {
        restrict: "EA", replace: !0, templateUrl: "template/modal/backdrop.html", link: function (t, i, r) {
            t.backdropClass = r.backdropClass || "";
            t.animate = !1;
            n(function () {
                t.animate = !0
            })
        }
    }
}]).directive("modalWindow", ["$modalStack", "$timeout", function (n, t) {
    return {
        restrict: "EA",
        scope: {index: "@", animate: "="},
        replace: !0,
        transclude: !0,
        templateUrl: function (n, t) {
            return t.templateUrl || "template/modal/window.html"
        },
        link: function (i, r, u) {
            r.addClass(u.windowClass || "");
            i.size = u.size;
            t(function () {
                i.animate = !0;
                r[0].querySelectorAll("[autofocus]").length || r[0].focus()
            });
            i.close = function (t) {
                var i = n.getTop();
                i && i.value.backdrop && "static" != i.value.backdrop && t.target === t.currentTarget && (t.preventDefault(), t.stopPropagation(), n.dismiss(i.key, "backdrop click"))
            }
        }
    }
}]).directive("modalTransclude", function () {
    return {
        link: function (n, t, i, r, u) {
            u(n.$parent, function (n) {
                t.empty();
                t.append(n)
            })
        }
    }
}).factory("$modalStack", ["$transition", "$timeout", "$document", "$compile", "$rootScope", "$$stackedMap", function (n, t, i, r, u, f) {
    function c() {
        for (var t = -1, i = e.keys(), n = 0; n < i.length; n++)e.get(i[n]).value.backdrop && (t = n);
        return t
    }

    function l(n) {
        var r = i.find("body").eq(0), t = e.get(n).value;
        e.remove(n);
        a(t.modalDomEl, t.modalScope, 300, function () {
            t.modalScope.$destroy();
            r.toggleClass(v, e.length() > 0);
            y()
        })
    }

    function y() {
        if (h && -1 == c()) {
            var n = o;
            a(h, o, 150, function () {
                n.$destroy();
                n = null
            });
            h = void 0;
            o = void 0
        }
    }

    function a(i, r, u, f) {
        function e() {
            e.done || (e.done = !0, i.remove(), f && f())
        }

        var o, s;
        r.animate = !1;
        o = n.transitionEndEventName;
        o ? (s = t(e, u), i.bind(o, function () {
                t.cancel(s);
                e();
                r.$apply()
            })) : t(e)
    }

    var h, o, v = "modal-open", e = f.createNew(), s = {};
    return u.$watch(c, function (n) {
        o && (o.index = n)
    }), i.bind("keydown", function (n) {
        var t;
        27 === n.which && (t = e.top(), t && t.value.keyboard && (n.preventDefault(), u.$apply(function () {
            s.dismiss(t.key, "escape key press")
        })))
    }), s.open = function (n, t) {
        var f, s, l, a, y;
        e.add(n, {deferred: t.deferred, modalScope: t.scope, backdrop: t.backdrop, keyboard: t.keyboard});
        f = i.find("body").eq(0);
        s = c();
        s >= 0 && !h && (o = u.$new(!0), o.index = s, l = angular.element("<div modal-backdrop><\/div>"), l.attr("backdrop-class", t.backdropClass), h = r(l)(o), f.append(h));
        a = angular.element("<div modal-window><\/div>");
        a.attr({
            "template-url": t.windowTemplateUrl,
            "window-class": t.windowClass,
            size: t.size,
            index: e.length() - 1,
            animate: "animate"
        }).html(t.content);
        y = r(a)(t.scope);
        e.top().value.modalDomEl = y;
        f.append(y);
        f.addClass(v)
    }, s.close = function (n, t) {
        var i = e.get(n);
        i && (i.value.deferred.resolve(t), l(n))
    }, s.dismiss = function (n, t) {
        var i = e.get(n);
        i && (i.value.deferred.reject(t), l(n))
    }, s.dismissAll = function (n) {
        for (var t = this.getTop(); t;)this.dismiss(t.key, n), t = this.getTop()
    }, s.getTop = function () {
        return e.top()
    }, s
}]).provider("$modal", function () {
    var n = {
        options: {backdrop: !0, keyboard: !0},
        $get: ["$injector", "$rootScope", "$q", "$http", "$templateCache", "$controller", "$modalStack", function (t, i, r, u, f, e, o) {
            function h(n) {
                return n.template ? r.when(n.template) : u.get(angular.isFunction(n.templateUrl) ? n.templateUrl() : n.templateUrl, {cache: f}).then(function (n) {
                        return n.data
                    })
            }

            function c(n) {
                var i = [];
                return angular.forEach(n, function (n) {
                    (angular.isFunction(n) || angular.isArray(n)) && i.push(r.when(t.invoke(n)))
                }), i
            }

            var s = {};
            return s.open = function (t) {
                var f = r.defer(), s = r.defer(), u = {
                    result: f.promise, opened: s.promise, close: function (n) {
                        o.close(u, n)
                    }, dismiss: function (n) {
                        o.dismiss(u, n)
                    }
                }, l;
                if (t = angular.extend({}, n.options, t), t.resolve = t.resolve || {}, !t.template && !t.templateUrl)throw new Error("One of template or templateUrl options is required.");
                return l = r.all([h(t)].concat(c(t.resolve))), l.then(function (n) {
                    var r = (t.scope || i).$new(), h, s, c;
                    r.$close = u.close;
                    r.$dismiss = u.dismiss;
                    s = {};
                    c = 1;
                    t.controller && (s.$scope = r, s.$modalInstance = u, angular.forEach(t.resolve, function (t, i) {
                        s[i] = n[c++]
                    }), h = e(t.controller, s), t.controllerAs && (r[t.controllerAs] = h));
                    o.open(u, {
                        scope: r,
                        deferred: f,
                        content: n[0],
                        backdrop: t.backdrop,
                        keyboard: t.keyboard,
                        backdropClass: t.backdropClass,
                        windowClass: t.windowClass,
                        windowTemplateUrl: t.windowTemplateUrl,
                        size: t.size
                    })
                }, function (n) {
                    f.reject(n)
                }), l.then(function () {
                    s.resolve(!0)
                }, function () {
                    s.reject(!1)
                }), u
            }, s
        }]
    };
    return n
});
angular.module("ui.bootstrap.pagination", []).controller("PaginationController", ["$scope", "$attrs", "$parse", function (n, t, i) {
    var u = this, r = {$setViewValue: angular.noop}, f = t.numPages ? i(t.numPages).assign : angular.noop;
    this.init = function (f, e) {
        r = f;
        this.config = e;
        r.$render = function () {
            u.render()
        };
        t.itemsPerPage ? n.$parent.$watch(i(t.itemsPerPage), function (t) {
                u.itemsPerPage = parseInt(t, 10);
                n.totalPages = u.calculateTotalPages()
            }) : this.itemsPerPage = e.itemsPerPage
    };
    this.calculateTotalPages = function () {
        var t = this.itemsPerPage < 1 ? 1 : Math.ceil(n.totalItems / this.itemsPerPage);
        return Math.max(t || 0, 1)
    };
    this.render = function () {
        n.page = parseInt(r.$viewValue, 10) || 1
    };
    n.selectPage = function (t) {
        n.page !== t && t > 0 && t <= n.totalPages && (r.$setViewValue(t), r.$render())
    };
    n.getText = function (t) {
        return n[t + "Text"] || u.config[t + "Text"]
    };
    n.noPrevious = function () {
        return 1 === n.page
    };
    n.noNext = function () {
        return n.page === n.totalPages
    };
    n.$watch("totalItems", function () {
        n.totalPages = u.calculateTotalPages()
    });
    n.$watch("totalPages", function (t) {
        f(n.$parent, t);
        n.page > t ? n.selectPage(t) : r.$render()
    })
}]).constant("paginationConfig", {
    itemsPerPage: 10,
    boundaryLinks: !1,
    directionLinks: !0,
    firstText: "First",
    previousText: "Previous",
    nextText: "Next",
    lastText: "Last",
    rotate: !0
}).directive("pagination", ["$parse", "paginationConfig", function (n, t) {
    return {
        restrict: "EA",
        scope: {totalItems: "=", firstText: "@", previousText: "@", nextText: "@", lastText: "@"},
        require: ["pagination", "?ngModel"],
        controller: "PaginationController",
        templateUrl: "template/pagination/pagination.html",
        replace: !0,
        link: function (i, r, u, f) {
            function s(n, t, i) {
                return {number: n, text: t, active: i}
            }

            function a(n, t) {
                var f = [], i = 1, r = t, o = angular.isDefined(e) && t > e, u, c, l, a;
                for (o && (h ? (i = Math.max(n - Math.floor(e / 2), 1), r = i + e - 1, r > t && (r = t, i = r - e + 1)) : (i = (Math.ceil(n / e) - 1) * e + 1, r = Math.min(i + e - 1, t))), u = i; r >= u; u++)c = s(u, u, u === n), f.push(c);
                return o && !h && (i > 1 && (l = s(i - 1, "...", !1), f.unshift(l)), t > r && (a = s(r + 1, "...", !1), f.push(a))), f
            }

            var o = f[0], c = f[1], e, h, l;
            c && (e = angular.isDefined(u.maxSize) ? i.$parent.$eval(u.maxSize) : t.maxSize, h = angular.isDefined(u.rotate) ? i.$parent.$eval(u.rotate) : t.rotate, i.boundaryLinks = angular.isDefined(u.boundaryLinks) ? i.$parent.$eval(u.boundaryLinks) : t.boundaryLinks, i.directionLinks = angular.isDefined(u.directionLinks) ? i.$parent.$eval(u.directionLinks) : t.directionLinks, o.init(c, t), u.maxSize && i.$parent.$watch(n(u.maxSize), function (n) {
                e = parseInt(n, 10);
                o.render()
            }), l = o.render, o.render = function () {
                l();
                i.page > 0 && i.page <= i.totalPages && (i.pages = a(i.page, i.totalPages))
            })
        }
    }
}]).constant("pagerConfig", {
    itemsPerPage: 10,
    previousText: "« Previous",
    nextText: "Next »",
    align: !0
}).directive("pager", ["pagerConfig", function (n) {
    return {
        restrict: "EA",
        scope: {totalItems: "=", previousText: "@", nextText: "@"},
        require: ["pager", "?ngModel"],
        controller: "PaginationController",
        templateUrl: "template/pagination/pager.html",
        replace: !0,
        link: function (t, i, r, u) {
            var e = u[0], f = u[1];
            f && (t.align = angular.isDefined(r.align) ? t.$parent.$eval(r.align) : n.align, e.init(f, n))
        }
    }
}]);
angular.module("ui.bootstrap.tooltip", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).provider("$tooltip", function () {
    function i(n) {
        var t = "-";
        return n.replace(/[A-Z]/g, function (n, i) {
            return (i ? t : "") + n.toLowerCase()
        })
    }

    var r = {placement: "top", animation: !0, popupDelay: 0}, n = {
        mouseenter: "mouseleave",
        click: "click",
        focus: "blur"
    }, t = {};
    this.options = function (n) {
        angular.extend(t, n)
    };
    this.setTriggers = function (t) {
        angular.extend(n, t)
    };
    this.$get = ["$window", "$compile", "$timeout", "$document", "$position", "$interpolate", function (u, f, e, o, s, h) {
        return function (u, c, l) {
            function p(t) {
                var i = t || a.trigger || l, r = n[i] || i;
                return {show: i, hide: r}
            }

            var a = angular.extend({}, r, t), w = i(u), v = h.startSymbol(), y = h.endSymbol(), b = "<div " + w + '-popup title="' + v + "title" + y + '" content="' + v + "content" + y + '" placement="' + v + "placement" + y + '" animation="animation" is-open="isOpen"><\/div>';
            return {
                restrict: "EA", compile: function () {
                    var n = f(b);
                    return function (t, i, r) {
                        function et() {
                            f.isOpen ? g() : d()
                        }

                        function d() {
                            (!at || t.$eval(r[c + "Enable"])) && (st(), f.popupDelay ? y || (y = e(ut, f.popupDelay, !1), y.then(function (n) {
                                    n()
                                })) : ut()())
                        }

                        function g() {
                            t.$apply(function () {
                                nt()
                            })
                        }

                        function ut() {
                            return y = null, v && (e.cancel(v), v = null), f.content ? (ot(), h.css({
                                    top: 0,
                                    left: 0,
                                    display: "block"
                                }), b ? o.find("body").append(h) : i.after(h), ft(), f.isOpen = !0, f.$digest(), ft) : angular.noop
                        }

                        function nt() {
                            f.isOpen = !1;
                            e.cancel(y);
                            y = null;
                            f.animation ? v || (v = e(k, 500)) : k()
                        }

                        function ot() {
                            h && k();
                            w = f.$new();
                            h = n(w, angular.noop)
                        }

                        function k() {
                            v = null;
                            h && (h.remove(), h = null);
                            w && (w.$destroy(), w = null)
                        }

                        function st() {
                            ht();
                            ct()
                        }

                        function ht() {
                            var n = r[c + "Placement"];
                            f.placement = angular.isDefined(n) ? n : a.placement
                        }

                        function ct() {
                            var t = r[c + "PopupDelay"], n = parseInt(t, 10);
                            f.popupDelay = isNaN(n) ? a.popupDelay : n
                        }

                        function lt() {
                            var n = r[c + "Trigger"];
                            tt();
                            l = p(n);
                            l.show === l.hide ? i.bind(l.show, et) : (i.bind(l.show, d), i.bind(l.hide, g))
                        }

                        var h, w, v, y, b = angular.isDefined(a.appendToBody) ? a.appendToBody : !1, l = p(void 0), at = angular.isDefined(r[c + "Enable"]), f = t.$new(!0), ft = function () {
                            var n = s.positionElements(i, h, f.placement, b);
                            n.top += "px";
                            n.left += "px";
                            h.css(n)
                        }, tt, it, rt;
                        f.isOpen = !1;
                        r.$observe(u, function (n) {
                            f.content = n;
                            !n && f.isOpen && nt()
                        });
                        r.$observe(c + "Title", function (n) {
                            f.title = n
                        });
                        tt = function () {
                            i.unbind(l.show, d);
                            i.unbind(l.hide, g)
                        };
                        lt();
                        it = t.$eval(r[c + "Animation"]);
                        f.animation = angular.isDefined(it) ? !!it : a.animation;
                        rt = t.$eval(r[c + "AppendToBody"]);
                        b = angular.isDefined(rt) ? rt : b;
                        b && t.$on("$locationChangeSuccess", function () {
                            f.isOpen && nt()
                        });
                        t.$on("$destroy", function () {
                            e.cancel(v);
                            e.cancel(y);
                            tt();
                            k();
                            f = null
                        })
                    }
                }
            }
        }
    }]
}).directive("tooltipPopup", function () {
    return {
        restrict: "EA",
        replace: !0,
        scope: {content: "@", placement: "@", animation: "&", isOpen: "&"},
        templateUrl: "template/tooltip/tooltip-popup.html"
    }
}).directive("tooltip", ["$tooltip", function (n) {
    return n("tooltip", "tooltip", "mouseenter")
}]).directive("tooltipHtmlUnsafePopup", function () {
    return {
        restrict: "EA",
        replace: !0,
        scope: {content: "@", placement: "@", animation: "&", isOpen: "&"},
        templateUrl: "template/tooltip/tooltip-html-unsafe-popup.html"
    }
}).directive("tooltipHtmlUnsafe", ["$tooltip", function (n) {
    return n("tooltipHtmlUnsafe", "tooltip", "mouseenter")
}]);
angular.module("ui.bootstrap.popover", ["ui.bootstrap.tooltip"]).directive("popoverPopup", function () {
    return {
        restrict: "EA",
        replace: !0,
        scope: {title: "@", content: "@", placement: "@", animation: "&", isOpen: "&"},
        templateUrl: "template/popover/popover.html"
    }
}).directive("popover", ["$tooltip", function (n) {
    return n("popover", "popover", "click")
}]);
angular.module("ui.bootstrap.progressbar", []).constant("progressConfig", {
    animate: !0,
    max: 100
}).controller("ProgressController", ["$scope", "$attrs", "progressConfig", function (n, t, i) {
    var r = this, u = angular.isDefined(t.animate) ? n.$parent.$eval(t.animate) : i.animate;
    this.bars = [];
    n.max = angular.isDefined(t.max) ? n.$parent.$eval(t.max) : i.max;
    this.addBar = function (t, i) {
        u || i.css({transition: "none"});
        this.bars.push(t);
        t.$watch("value", function (i) {
            t.percent = +(100 * i / n.max).toFixed(2)
        });
        t.$on("$destroy", function () {
            i = null;
            r.removeBar(t)
        })
    };
    this.removeBar = function (n) {
        this.bars.splice(this.bars.indexOf(n), 1)
    }
}]).directive("progress", function () {
    return {
        restrict: "EA",
        replace: !0,
        transclude: !0,
        controller: "ProgressController",
        require: "progress",
        scope: {},
        templateUrl: "template/progressbar/progress.html"
    }
}).directive("bar", function () {
    return {
        restrict: "EA",
        replace: !0,
        transclude: !0,
        require: "^progress",
        scope: {value: "=", type: "@"},
        templateUrl: "template/progressbar/bar.html",
        link: function (n, t, i, r) {
            r.addBar(n, t)
        }
    }
}).directive("progressbar", function () {
    return {
        restrict: "EA",
        replace: !0,
        transclude: !0,
        controller: "ProgressController",
        scope: {value: "=", type: "@"},
        templateUrl: "template/progressbar/progressbar.html",
        link: function (n, t, i, r) {
            r.addBar(n, angular.element(t.children()[0]))
        }
    }
});
angular.module("ui.bootstrap.rating", []).constant("ratingConfig", {
    max: 5,
    stateOn: null,
    stateOff: null
}).controller("RatingController", ["$scope", "$attrs", "ratingConfig", function (n, t, i) {
    var r = {$setViewValue: angular.noop};
    this.init = function (u) {
        r = u;
        r.$render = this.render;
        this.stateOn = angular.isDefined(t.stateOn) ? n.$parent.$eval(t.stateOn) : i.stateOn;
        this.stateOff = angular.isDefined(t.stateOff) ? n.$parent.$eval(t.stateOff) : i.stateOff;
        var f = angular.isDefined(t.ratingStates) ? n.$parent.$eval(t.ratingStates) : new Array(angular.isDefined(t.max) ? n.$parent.$eval(t.max) : i.max);
        n.range = this.buildTemplateObjects(f)
    };
    this.buildTemplateObjects = function (n) {
        for (var t = 0, i = n.length; i > t; t++)n[t] = angular.extend({index: t}, {
            stateOn: this.stateOn,
            stateOff: this.stateOff
        }, n[t]);
        return n
    };
    n.rate = function (t) {
        !n.readonly && t >= 0 && t <= n.range.length && (r.$setViewValue(t), r.$render())
    };
    n.enter = function (t) {
        n.readonly || (n.value = t);
        n.onHover({value: t})
    };
    n.reset = function () {
        n.value = r.$viewValue;
        n.onLeave()
    };
    n.onKeydown = function (t) {
        /(37|38|39|40)/.test(t.which) && (t.preventDefault(), t.stopPropagation(), n.rate(n.value + (38 === t.which || 39 === t.which ? 1 : -1)))
    };
    this.render = function () {
        n.value = r.$viewValue
    }
}]).directive("rating", function () {
    return {
        restrict: "EA",
        require: ["rating", "ngModel"],
        scope: {readonly: "=?", onHover: "&", onLeave: "&"},
        controller: "RatingController",
        templateUrl: "template/rating/rating.html",
        replace: !0,
        link: function (n, t, i, r) {
            var f = r[0], u = r[1];
            u && f.init(u)
        }
    }
});
angular.module("ui.bootstrap.tabs", []).controller("TabsetController", ["$scope", function (n) {
    var i = this, t = i.tabs = n.tabs = [], r;
    i.select = function (n) {
        angular.forEach(t, function (t) {
            t.active && t !== n && (t.active = !1, t.onDeselect())
        });
        n.active = !0;
        n.onSelect()
    };
    i.addTab = function (n) {
        t.push(n);
        1 === t.length ? n.active = !0 : n.active && i.select(n)
    };
    i.removeTab = function (n) {
        var u = t.indexOf(n), f;
        n.active && t.length > 1 && !r && (f = u == t.length - 1 ? u - 1 : u + 1, i.select(t[f]));
        t.splice(u, 1)
    };
    n.$on("$destroy", function () {
        r = !0
    })
}]).directive("tabset", function () {
    return {
        restrict: "EA",
        transclude: !0,
        replace: !0,
        scope: {type: "@"},
        controller: "TabsetController",
        templateUrl: "template/tabs/tabset.html",
        link: function (n, t, i) {
            n.vertical = angular.isDefined(i.vertical) ? n.$parent.$eval(i.vertical) : !1;
            n.justified = angular.isDefined(i.justified) ? n.$parent.$eval(i.justified) : !1
        }
    }
}).directive("tab", ["$parse", function (n) {
    return {
        require: "^tabset",
        restrict: "EA",
        replace: !0,
        templateUrl: "template/tabs/tab.html",
        transclude: !0,
        scope: {active: "=?", heading: "@", onSelect: "&select", onDeselect: "&deselect"},
        controller: function () {
        },
        compile: function (t, i, r) {
            return function (t, i, u, f) {
                t.$watch("active", function (n) {
                    n && f.select(t)
                });
                t.disabled = !1;
                u.disabled && t.$parent.$watch(n(u.disabled), function (n) {
                    t.disabled = !!n
                });
                t.select = function () {
                    t.disabled || (t.active = !0)
                };
                f.addTab(t);
                t.$on("$destroy", function () {
                    f.removeTab(t)
                });
                t.$transcludeFn = r
            }
        }
    }
}]).directive("tabHeadingTransclude", [function () {
    return {
        restrict: "A", require: "^tab", link: function (n, t) {
            n.$watch("headingElement", function (n) {
                n && (t.html(""), t.append(n))
            })
        }
    }
}]).directive("tabContentTransclude", function () {
    function n(n) {
        return n.tagName && (n.hasAttribute("tab-heading") || n.hasAttribute("data-tab-heading") || "tab-heading" === n.tagName.toLowerCase() || "data-tab-heading" === n.tagName.toLowerCase())
    }

    return {
        restrict: "A", require: "^tabset", link: function (t, i, r) {
            var u = t.$eval(r.tabContentTransclude);
            u.$transcludeFn(u.$parent, function (t) {
                angular.forEach(t, function (t) {
                    n(t) ? u.headingElement = t : i.append(t)
                })
            })
        }
    }
});
angular.module("ui.bootstrap.timepicker", []).constant("timepickerConfig", {
    hourStep: 1,
    minuteStep: 1,
    showMeridian: !0,
    meridians: null,
    readonlyInput: !1,
    mousewheel: !0
}).controller("TimepickerController", ["$scope", "$attrs", "$parse", "$log", "$locale", "timepickerConfig", function (n, t, i, r, u, f) {
    function p() {
        var t = parseInt(n.hours, 10), i = n.showMeridian ? t > 0 && 13 > t : t >= 0 && 24 > t;
        if (i)return (n.showMeridian && (12 === t && (t = 0), n.meridian === y[1] && (t += 12)), t)
    }

    function w() {
        var t = parseInt(n.minutes, 10);
        if (t >= 0 && 60 > t)return t
    }

    function h(n) {
        return angular.isDefined(n) && n.toString().length < 2 ? "0" + n : n
    }

    function c(n) {
        b();
        o.$setViewValue(new Date(e));
        v(n)
    }

    function b() {
        o.$setValidity("time", !0);
        n.invalidHours = !1;
        n.invalidMinutes = !1
    }

    function v(t) {
        var i = e.getHours(), r = e.getMinutes();
        n.showMeridian && (i = 0 === i || 12 === i ? 12 : i % 12);
        n.hours = "h" === t ? i : h(i);
        n.minutes = "m" === t ? r : h(r);
        n.meridian = e.getHours() < 12 ? y[0] : y[1]
    }

    function s(n) {
        var t = new Date(e.getTime() + 6e4 * n);
        e.setHours(t.getHours(), t.getMinutes());
        c()
    }

    var e = new Date, o = {$setViewValue: angular.noop}, y = angular.isDefined(t.meridians) ? n.$parent.$eval(t.meridians) : f.meridians || u.DATETIME_FORMATS.AMPMS, l, a;
    this.init = function (i, r) {
        o = i;
        o.$render = this.render;
        var u = r.eq(0), e = r.eq(1), s = angular.isDefined(t.mousewheel) ? n.$parent.$eval(t.mousewheel) : f.mousewheel;
        s && this.setupMousewheelEvents(u, e);
        n.readonlyInput = angular.isDefined(t.readonlyInput) ? n.$parent.$eval(t.readonlyInput) : f.readonlyInput;
        this.setupInputEvents(u, e)
    };
    l = f.hourStep;
    t.hourStep && n.$parent.$watch(i(t.hourStep), function (n) {
        l = parseInt(n, 10)
    });
    a = f.minuteStep;
    t.minuteStep && n.$parent.$watch(i(t.minuteStep), function (n) {
        a = parseInt(n, 10)
    });
    n.showMeridian = f.showMeridian;
    t.showMeridian && n.$parent.$watch(i(t.showMeridian), function (t) {
        if (n.showMeridian = !!t, o.$error.time) {
            var i = p(), r = w();
            angular.isDefined(i) && angular.isDefined(r) && (e.setHours(i), c())
        } else v()
    });
    this.setupMousewheelEvents = function (t, i) {
        var r = function (n) {
            n.originalEvent && (n = n.originalEvent);
            var t = n.wheelDelta ? n.wheelDelta : -n.deltaY;
            return n.detail || t > 0
        };
        t.bind("mousewheel wheel", function (t) {
            n.$apply(r(t) ? n.incrementHours() : n.decrementHours());
            t.preventDefault()
        });
        i.bind("mousewheel wheel", function (t) {
            n.$apply(r(t) ? n.incrementMinutes() : n.decrementMinutes());
            t.preventDefault()
        })
    };
    this.setupInputEvents = function (t, i) {
        if (n.readonlyInput)return n.updateHours = angular.noop, void(n.updateMinutes = angular.noop);
        var r = function (t, i) {
            o.$setViewValue(null);
            o.$setValidity("time", !1);
            angular.isDefined(t) && (n.invalidHours = t);
            angular.isDefined(i) && (n.invalidMinutes = i)
        };
        n.updateHours = function () {
            var n = p();
            angular.isDefined(n) ? (e.setHours(n), c("h")) : r(!0)
        };
        t.bind("blur", function () {
            !n.invalidHours && n.hours < 10 && n.$apply(function () {
                n.hours = h(n.hours)
            })
        });
        n.updateMinutes = function () {
            var n = w();
            angular.isDefined(n) ? (e.setMinutes(n), c("m")) : r(void 0, !0)
        };
        i.bind("blur", function () {
            !n.invalidMinutes && n.minutes < 10 && n.$apply(function () {
                n.minutes = h(n.minutes)
            })
        })
    };
    this.render = function () {
        var n = o.$modelValue ? new Date(o.$modelValue) : null;
        isNaN(n) ? (o.$setValidity("time", !1), r.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')) : (n && (e = n), b(), v())
    };
    n.incrementHours = function () {
        s(60 * l)
    };
    n.decrementHours = function () {
        s(60 * -l)
    };
    n.incrementMinutes = function () {
        s(a)
    };
    n.decrementMinutes = function () {
        s(-a)
    };
    n.toggleMeridian = function () {
        s(720 * (e.getHours() < 12 ? 1 : -1))
    }
}]).directive("timepicker", function () {
    return {
        restrict: "EA",
        require: ["timepicker", "?^ngModel"],
        controller: "TimepickerController",
        replace: !0,
        scope: {},
        templateUrl: "template/timepicker/timepicker.html",
        link: function (n, t, i, r) {
            var f = r[0], u = r[1];
            u && f.init(u, t.find("input"))
        }
    }
});
angular.module("ui.bootstrap.typeahead", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).factory("typeaheadParser", ["$parse", function (n) {
    var t = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;
    return {
        parse: function (i) {
            var r = i.match(t);
            if (!r)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "' + i + '".');
            return {itemName: r[3], source: n(r[4]), viewMapper: n(r[2] || r[1]), modelMapper: n(r[1])}
        }
    }
}]).directive("typeahead", ["$compile", "$parse", "$q", "$timeout", "$document", "$position", "typeaheadParser", function (n, t, i, r, u, f, e) {
    var o = [9, 13, 27, 38, 40];
    return {
        require: "ngModel", link: function (s, h, c, l) {
            var d, st = s.$eval(c.typeaheadMinLength) || 1, ft = s.$eval(c.typeaheadWaitMs) || 0, ht = s.$eval(c.typeaheadEditable) !== !1, p = t(c.typeaheadLoading).assign || angular.noop, ct = t(c.typeaheadOnSelect), et = c.typeaheadInputFormatter ? t(c.typeaheadInputFormatter) : void 0, g = c.typeaheadAppendToBody ? s.$eval(c.typeaheadAppendToBody) : !1, lt = s.$eval(c.typeaheadFocusFirst) !== !1, at = t(c.ngModel).assign, v = e.parse(c.typeahead), a = s.$new(), w, b, y, nt, tt, it, ot, rt, ut, k;
            s.$on("$destroy", function () {
                a.$destroy()
            });
            w = "typeahead-" + a.$id + "-" + Math.floor(1e4 * Math.random());
            h.attr({"aria-autocomplete": "list", "aria-expanded": !1, "aria-owns": w});
            b = angular.element("<div typeahead-popup><\/div>");
            b.attr({
                id: w,
                matches: "matches",
                active: "activeIdx",
                select: "select(activeIdx)",
                query: "query",
                position: "position"
            });
            angular.isDefined(c.typeaheadTemplateUrl) && b.attr("template-url", c.typeaheadTemplateUrl);
            y = function () {
                a.matches = [];
                a.activeIdx = -1;
                h.attr("aria-expanded", !1)
            };
            nt = function (n) {
                return w + "-option-" + n
            };
            a.$watch("activeIdx", function (n) {
                0 > n ? h.removeAttr("aria-activedescendant") : h.attr("aria-activedescendant", nt(n))
            });
            tt = function (n) {
                var t = {$viewValue: n};
                p(s, !0);
                i.when(v.source(s, t)).then(function (i) {
                    var u = n === l.$viewValue, r;
                    if (u && d)if (i.length > 0) {
                        for (a.activeIdx = lt ? 0 : -1, a.matches.length = 0, r = 0; r < i.length; r++)t[v.itemName] = i[r], a.matches.push({
                            id: nt(r),
                            label: v.viewMapper(a, t),
                            model: i[r]
                        });
                        a.query = n;
                        a.position = g ? f.offset(h) : f.position(h);
                        a.position.top = a.position.top + h.prop("offsetHeight");
                        h.attr("aria-expanded", !0)
                    } else y();
                    u && p(s, !1)
                }, function () {
                    y();
                    p(s, !1)
                })
            };
            y();
            a.query = void 0;
            ot = function (n) {
                it = r(function () {
                    tt(n)
                }, ft)
            };
            rt = function () {
                it && r.cancel(it)
            };
            l.$parsers.unshift(function (n) {
                return d = !0, n && n.length >= st ? ft > 0 ? (rt(), ot(n)) : tt(n) : (p(s, !1), rt(), y()), ht ? n : n ? void l.$setValidity("editable", !1) : (l.$setValidity("editable", !0), n)
            });
            l.$formatters.push(function (n) {
                var i, r, t = {};
                return et ? (t.$model = n, et(s, t)) : (t[v.itemName] = n, i = v.viewMapper(s, t), t[v.itemName] = void 0, r = v.viewMapper(s, t), i !== r ? i : n)
            });
            a.select = function (n) {
                var t, u, i = {};
                i[v.itemName] = u = a.matches[n].model;
                t = v.modelMapper(s, i);
                at(s, t);
                l.$setValidity("editable", !0);
                ct(s, {$item: u, $model: t, $label: v.viewMapper(s, i)});
                y();
                r(function () {
                    h[0].focus()
                }, 0, !1)
            };
            h.bind("keydown", function (n) {
                0 !== a.matches.length && -1 !== o.indexOf(n.which) && (-1 != a.activeIdx || 13 !== n.which && 9 !== n.which) && (n.preventDefault(), 40 === n.which ? (a.activeIdx = (a.activeIdx + 1) % a.matches.length, a.$digest()) : 38 === n.which ? (a.activeIdx = (a.activeIdx > 0 ? a.activeIdx : a.matches.length) - 1, a.$digest()) : 13 === n.which || 9 === n.which ? a.$apply(function () {
                                a.select(a.activeIdx)
                            }) : 27 === n.which && (n.stopPropagation(), y(), a.$digest()))
            });
            h.bind("blur", function () {
                d = !1
            });
            ut = function (n) {
                h[0] !== n.target && (y(), a.$digest())
            };
            u.bind("click", ut);
            s.$on("$destroy", function () {
                u.unbind("click", ut);
                g && k.remove()
            });
            k = n(b)(a);
            g ? u.find("body").append(k) : h.after(k)
        }
    }
}]).directive("typeaheadPopup", function () {
    return {
        restrict: "EA",
        scope: {matches: "=", query: "=", active: "=", position: "=", select: "&"},
        replace: !0,
        templateUrl: "template/typeahead/typeahead-popup.html",
        link: function (n, t, i) {
            n.templateUrl = i.templateUrl;
            n.isOpen = function () {
                return n.matches.length > 0
            };
            n.isActive = function (t) {
                return n.active == t
            };
            n.selectActive = function (t) {
                n.active = t
            };
            n.selectMatch = function (t) {
                n.select({activeIdx: t})
            }
        }
    }
}).directive("typeaheadMatch", ["$http", "$templateCache", "$compile", "$parse", function (n, t, i, r) {
    return {
        restrict: "EA", scope: {index: "=", match: "=", query: "="}, link: function (u, f, e) {
            var o = r(e.templateUrl)(u.$parent) || "template/typeahead/typeahead-match.html";
            n.get(o, {cache: t}).success(function (n) {
                f.replaceWith(i(n.trim())(u))
            })
        }
    }
}]).filter("typeaheadHighlight", function () {
    function n(n) {
        return n.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1")
    }

    return function (t, i) {
        return i ? ("" + t).replace(new RegExp(n(i), "gi"), "<strong>$&<\/strong>") : t
    }
});
"undefined" != typeof module && "undefined" != typeof exports && module.exports === exports && (module.exports = "ui.router"), function (n, t, i) {
    "use strict";
    function w(n, t) {
        return r(new (r(function () {
        }, {prototype: n})), t)
    }

    function k(n) {
        return f(arguments, function (t) {
            t !== n && f(t, function (t, i) {
                n.hasOwnProperty(i) || (n[i] = t)
            })
        }), n
    }

    function wt(n, t) {
        var r = [], i;
        for (i in n.path) {
            if (n.path[i] !== t.path[i])break;
            r.push(n.path[i])
        }
        return r
    }

    function p(n) {
        if (Object.keys)return Object.keys(n);
        var i = [];
        return t.forEach(n, function (n, t) {
            i.push(t)
        }), i
    }

    function s(n, t) {
        if (Array.prototype.indexOf)return n.indexOf(t, Number(arguments[2]) || 0);
        var r = n.length >>> 0, i = Number(arguments[2]) || 0;
        for (i = 0 > i ? Math.ceil(i) : Math.floor(i), 0 > i && (i += r); r > i; i++)if (i in n && n[i] === t)return i;
        return -1
    }

    function it(n, t, i, u) {
        var f, o = wt(i, u), c = {}, l = [], h, e;
        for (h in o)if (o[h].params && (f = p(o[h].params), f.length))for (e in f)s(l, f[e]) >= 0 || (l.push(f[e]), c[f[e]] = n[f[e]]);
        return r({}, c, t)
    }

    function d(n, t, i) {
        var f, r, u;
        if (!i) {
            i = [];
            for (f in n)i.push(f)
        }
        for (r = 0; r < i.length; r++)if (u = i[r], n[u] != t[u])return !1;
        return !0
    }

    function g(n, t) {
        var i = {};
        return f(n, function (n) {
            i[n] = t[n]
        }), i
    }

    function b(n) {
        var i = {}, r = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1)), t;
        for (t in n)-1 == s(r, t) && (i[t] = n[t]);
        return i
    }

    function nt(n, t) {
        var r = a(n), i = r ? [] : {};
        return f(n, function (n, u) {
            t(n, u) && (i[r ? i.length : u] = n)
        }), i
    }

    function v(n, t) {
        var i = a(n) ? [] : {};
        return f(n, function (n, r) {
            i[r] = t(n, r)
        }), i
    }

    function rt(n, t) {
        var h = 1, c = 2, o = {}, l = [], a = o, v = r(n.when(o), {$$promises: o, $$values: o});
        this.study = function (o) {
            function tt(n, i) {
                if (g[i] !== c) {
                    if (d.push(i), g[i] === h)throw d.splice(0, s(d, i)), new Error("Cyclic dependency: " + d.join(" -> "));
                    if (g[i] = h, e(n)) w.push(i, [function () {
                        return t.get(n)
                    }], l); else {
                        var r = t.annotate(n);
                        f(r, function (n) {
                            n !== i && o.hasOwnProperty(n) && tt(o[n], n)
                        });
                        w.push(i, n, r)
                    }
                    d.pop();
                    g[i] = c
                }
            }

            function it(n) {
                return y(n) && n.then && n.$$promises
            }

            if (!y(o))throw new Error("'invocables' must be an object");
            var nt = p(o || {}), w = [], d = [], g = {};
            return f(o, tt), o = d = g = null, function (e, o, s) {
                function p() {
                    --et || (rt || k(c, o.$$values), h.$$values = c, h.$$promises = h.$$promises || !0, delete h.$$inheritedValues, tt.resolve(c))
                }

                function g(n) {
                    h.$$failure = n;
                    tt.reject(n)
                }

                function ft(i, r, o) {
                    function a(n) {
                        l.reject(n);
                        g(n)
                    }

                    function y() {
                        if (!u(h.$$failure))try {
                            l.resolve(t.invoke(r, s, c));
                            l.promise.then(function (n) {
                                c[i] = n;
                                p()
                            }, a)
                        } catch (n) {
                            a(n)
                        }
                    }

                    var l = n.defer(), v = 0;
                    f(o, function (n) {
                        d.hasOwnProperty(n) && !e.hasOwnProperty(n) && (v++, d[n].then(function (t) {
                            c[n] = t;
                            --v || y()
                        }, a))
                    });
                    v || y();
                    d[i] = l.promise
                }

                var l, ut;
                if (it(e) && s === i && (s = o, o = e, e = null), e) {
                    if (!y(e))throw new Error("'locals' must be an object");
                } else e = a;
                if (o) {
                    if (!it(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()");
                } else o = v;
                var tt = n.defer(), h = tt.promise, d = h.$$promises = {}, c = r({}, e), et = 1 + w.length / 3, rt = !1;
                if (u(o.$$failure))return g(o.$$failure), h;
                for (o.$$inheritedValues && k(c, b(o.$$inheritedValues, nt)), r(d, o.$$promises), o.$$values ? (rt = k(c, b(o.$$values, nt)), h.$$inheritedValues = b(o.$$values, nt), p()) : (o.$$inheritedValues && (h.$$inheritedValues = b(o.$$inheritedValues, nt)), o.then(p, g)), l = 0, ut = w.length; ut > l; l += 3)e.hasOwnProperty(w[l]) ? p() : ft(w[l], w[l + 1], w[l + 2]);
                return h
            }
        };
        this.resolve = function (n, t, i, r) {
            return this.study(n)(t, i, r)
        }
    }

    function ut(n, t, i) {
        this.fromConfig = function (n, t, i) {
            return u(n.template) ? this.fromString(n.template, t) : u(n.templateUrl) ? this.fromUrl(n.templateUrl, t) : u(n.templateProvider) ? this.fromProvider(n.templateProvider, t, i) : null
        };
        this.fromString = function (n, t) {
            return h(n) ? n(t) : n
        };
        this.fromUrl = function (i, r) {
            return h(i) && (i = i(r)), null == i ? null : n.get(i, {
                    cache: t,
                    headers: {Accept: "text/html"}
                }).then(function (n) {
                    return n.data
                })
        };
        this.fromProvider = function (n, t, r) {
            return i.invoke(n, null, r || {params: t})
        }
    }

    function l(n, t, u) {
        function d(t, i, r, u) {
            if (it.push(t), tt[t])return tt[t];
            if (!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '" + t + "' in pattern '" + n + "'");
            if (b[t])throw new Error("Duplicate parameter name '" + t + "' in pattern '" + n + "'");
            return b[t] = new c.Param(t, i, r, u), b[t]
        }

        function g(n, t, i) {
            var r = ["", ""], u = n.replace(/[\\\[\]\^$*+?.()|{}]/g, "\\$&");
            if (!t)return u;
            switch (i) {
                case!1:
                    r = ["(", ")"];
                    break;
                case!0:
                    r = ["?(", ")?"];
                    break;
                default:
                    r = ["(" + i + "|", ")?"]
            }
            return u + r[0] + t + r[1]
        }

        function nt(i, r) {
            var f, u, e, s, h;
            return f = i[2] || i[3], h = t.params[f], e = n.substring(o, i.index), u = r ? i[4] : i[4] || ("*" == i[1] ? ".*" : null), s = c.type(u || "string") || w(c.type("string"), {pattern: new RegExp(u)}), {
                id: f,
                regexp: u,
                segment: e,
                type: s,
                cfg: h
            }
        }

        var f, l, e, s, k;
        t = r({params: {}}, y(t) ? t : {});
        var h, a = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, rt = /([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, v = "^", o = 0, p = this.segments = [], tt = u ? u.params : {}, b = this.params = u ? u.params.$$new() : new c.ParamSet, it = [];
        for (this.source = n; (h = a.exec(n)) && (f = nt(h, !1), !(f.segment.indexOf("?") >= 0));)l = d(f.id, f.type, f.cfg, "path"), v += g(f.segment, l.type.pattern.source, l.squash), p.push(f.segment), o = a.lastIndex;
        if (e = n.substring(o), s = e.indexOf("?"), s >= 0) {
            if (k = this.sourceSearch = e.substring(s), e = e.substring(0, s), this.sourcePath = n.substring(0, o + s), k.length > 0)for (o = 0; h = rt.exec(k);)f = nt(h, !0), l = d(f.id, f.type, f.cfg, "search"), o = a.lastIndex
        } else this.sourcePath = n, this.sourceSearch = "";
        v += g(e) + (t.strict === !1 ? "/?" : "") + "$";
        p.push(e);
        this.regexp = new RegExp(v, t.caseInsensitive ? "i" : i);
        this.prefix = p[0];
        this.$$paramNames = it
    }

    function o(n) {
        r(this, n)
    }

    function ft() {
        function rt(n) {
            return null != n ? n.toString().replace(/\//g, "%2F") : n
        }

        function ht(n) {
            return null != n ? n.toString().replace(/%2F/g, "/") : n
        }

        function ct(n) {
            return this.pattern.test(n)
        }

        function lt() {
            return {strict: g, caseInsensitive: d}
        }

        function ut(n) {
            return h(n) || a(n) && h(n[n.length - 1])
        }

        function et() {
            for (; it.length;) {
                var i = it.shift();
                if (i.pattern)throw new Error("You cannot override a type's .pattern at runtime.");
                t.extend(n[i.name], b.invoke(i.def))
            }
        }

        function k(n) {
            r(this, n || {})
        }

        c = this;
        var b, d = !1, g = !0, tt = !1, n = {}, ot = !0, it = [], st = {
            string: {
                encode: rt,
                decode: ht,
                is: ct,
                pattern: /[^/]*/
            },
            int: {
                encode: rt, decode: function (n) {
                    return parseInt(n, 10)
                }, is: function (n) {
                    return u(n) && this.decode(n.toString()) === n
                }, pattern: /\d+/
            },
            bool: {
                encode: function (n) {
                    return n ? 1 : 0
                }, decode: function (n) {
                    return 0 !== parseInt(n, 10)
                }, is: function (n) {
                    return n === !0 || n === !1
                }, pattern: /0|1/
            },
            date: {
                encode: function (n) {
                    return this.is(n) ? [n.getFullYear(), ("0" + (n.getMonth() + 1)).slice(-2), ("0" + n.getDate()).slice(-2)].join("-") : i
                },
                decode: function (n) {
                    if (this.is(n))return n;
                    var t = this.capture.exec(n);
                    return t ? new Date(t[1], t[2] - 1, t[3]) : i
                },
                is: function (n) {
                    return n instanceof Date && !isNaN(n.valueOf())
                },
                equals: function (n, t) {
                    return this.is(n) && this.is(t) && n.toISOString() === t.toISOString()
                },
                pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,
                capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/
            },
            json: {encode: t.toJson, decode: t.fromJson, is: t.isObject, equals: t.equals, pattern: /[^/]*/},
            any: {encode: t.identity, decode: t.identity, is: t.identity, equals: t.equals, pattern: /.*/}
        };
        ft.$$getDefaultValue = function (n) {
            if (!ut(n.value))return n.value;
            if (!b)throw new Error("Injectable functions cannot be called at configuration time");
            return b.invoke(n.value)
        };
        this.caseInsensitive = function (n) {
            return u(n) && (d = n), d
        };
        this.strictMode = function (n) {
            return u(n) && (g = n), g
        };
        this.defaultSquashPolicy = function (n) {
            if (!u(n))return tt;
            if (n !== !0 && n !== !1 && !e(n))throw new Error("Invalid squash policy: " + n + ". Valid policies: false, true, arbitrary-string");
            return tt = n, n
        };
        this.compile = function (n, t) {
            return new l(n, r(lt(), t))
        };
        this.isMatcher = function (n) {
            if (!y(n))return !1;
            var t = !0;
            return f(l.prototype, function (i, r) {
                h(i) && (t = t && u(n[r]) && h(n[r]))
            }), t
        };
        this.type = function (t, i, f) {
            if (!u(i))return n[t];
            if (n.hasOwnProperty(t))throw new Error("A type named '" + t + "' has already been defined.");
            return n[t] = new o(r({name: t}, i)), f && (it.push({name: t, def: f}), ot || et()), this
        };
        f(st, function (t, i) {
            n[i] = new o(r({name: i}, t))
        });
        n = w(n, {});
        this.$get = ["$injector", function (t) {
            return b = t, ot = !1, et(), f(st, function (t, i) {
                n[i] || (n[i] = new o(t))
            }), this
        }];
        this.Param = function (t, f, h, c) {
            function g(n) {
                var t = y(n) ? p(n) : [], i = -1 === s(t, "value") && -1 === s(t, "type") && -1 === s(t, "squash") && -1 === s(t, "array");
                return i && (n = {value: n}), n.$$fn = ut(n.value) ? n.value : function () {
                        return n.value
                    }, n
            }

            function it(i, r, u) {
                if (i.type && r)throw new Error("Param '" + t + "' has two type configurations.");
                return r ? r : i.type ? i.type instanceof o ? i.type : new o(i.type) : "config" === u ? n.any : n.string
            }

            function rt() {
                var n = {array: "search" === c ? "auto" : !1}, i = t.match(/\[\]$/) ? {array: !0} : {};
                return r(n, i, h).array
            }

            function ft(n, t) {
                var i = n.squash;
                if (!t || i === !1)return !1;
                if (!u(i) || null == i)return tt;
                if (i === !0 || e(i))return i;
                throw new Error("Invalid squash policy: '" + i + "'. Valid policies: false, true, or arbitrary string");
            }

            function et(n, t, r, u) {
                var f, o, h = [{from: "", to: r || t ? i : ""}, {from: null, to: r || t ? i : ""}];
                return f = a(n.replace) ? n.replace : [], e(u) && f.push({from: u, to: i}), o = v(f, function (n) {
                    return n.from
                }), nt(h, function (n) {
                    return -1 === s(o, n.from)
                }).concat(f)
            }

            function ot() {
                if (!b)throw new Error("Injectable functions cannot be called at configuration time");
                return b.invoke(h.$$fn)
            }

            function st(n) {
                function t(n) {
                    return function (t) {
                        return t.from === n
                    }
                }

                function i(n) {
                    var i = v(nt(d.replace, t(n)), function (n) {
                        return n.to
                    });
                    return i.length ? i[0] : n
                }

                return n = i(n), u(n) ? d.type.decode(n) : ot()
            }

            function ht() {
                return "{Param:" + t + " " + f + " squash: '" + k + "' optional: " + w + "}"
            }

            var d = this, l;
            h = g(h);
            f = it(h, f, c);
            l = rt();
            f = l ? f.$asArray(l, "search" === c) : f;
            "string" !== f.name || l || "path" !== c || h.value !== i || (h.value = "");
            var w = h.value !== i, k = ft(h, w), ct = et(h, l, w, k);
            r(this, {
                id: t,
                type: f,
                location: c,
                array: l,
                squash: k,
                replace: ct,
                isOptional: w,
                value: st,
                dynamic: i,
                config: h,
                toString: ht
            })
        };
        k.prototype = {
            $$new: function () {
                return w(this, r(new k, {$$parent: this}))
            }, $$keys: function () {
                for (var t = [], i = [], n = this, r = p(k.prototype); n;)i.push(n), n = n.$$parent;
                return i.reverse(), f(i, function (n) {
                    f(p(n), function (n) {
                        -1 === s(t, n) && -1 === s(r, n) && t.push(n)
                    })
                }), t
            }, $$values: function (n) {
                var t = {}, i = this;
                return f(i.$$keys(), function (r) {
                    t[r] = i[r].value(n && n[r])
                }), t
            }, $$equals: function (n, t) {
                var i = !0, r = this;
                return f(r.$$keys(), function (u) {
                    var f = n && n[u], e = t && t[u];
                    r[u].type.equals(f, e) || (i = !1)
                }), i
            }, $$validates: function (n) {
                var u, t, i, r = !0, e = this;
                return f(this.$$keys(), function (f) {
                    i = e[f];
                    t = n[f];
                    u = !t && i.isOptional;
                    r = r && (u || !!i.type.is(t))
                }), r
            }, $$parent: i
        };
        this.ParamSet = k
    }

    function et(n, f) {
        function p(n) {
            var t = /^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(n.source);
            return null != t ? t[1].replace(/\\(.)/g, "$1") : ""
        }

        function w(n, t) {
            return n.replace(/\$(\$|\d{1,2})/, function (n, i) {
                return t["$" === i ? 0 : Number(i)]
            })
        }

        function c(n, t, i) {
            if (!i)return !1;
            var r = n.invoke(t, t, {$match: i});
            return u(r) ? r : !0
        }

        function l(r, u, f, h) {
            function b(n, t, i) {
                return "/" === l ? n : t ? l.slice(0, -1) + n : i ? l.slice(1) + n : n
            }

            function p(n) {
                function u(n) {
                    var t = n(f, r);
                    return t ? (e(t) && r.replace().url(t), !0) : !1
                }

                var h, t, l;
                if (!n || !n.defaultPrevented) {
                    if (h = c && r.url() === c, c = i, h)return !0;
                    for (l = o.length, t = 0; l > t; t++)if (u(o[t]))return;
                    s && u(s)
                }
            }

            function w() {
                return v = v || u.$on("$locationChangeSuccess", p)
            }

            var c, l = h.baseHref(), a = r.url();
            return y || w(), {
                sync: function () {
                    p()
                }, listen: function () {
                    return w()
                }, update: function (n) {
                    return n ? void(a = r.url()) : void(r.url() !== a && (r.url(a), r.replace()))
                }, push: function (n, t, u) {
                    r.url(n.format(t || {}));
                    c = u && u.$$avoidResync ? r.url() : i;
                    u && u.replace && r.replace()
                }, href: function (i, u, f) {
                    var o, e, h, s;
                    return i.validates(u) ? (o = n.html5Mode(), t.isObject(o) && (o = o.enabled), e = i.format(u), f = f || {}, o || null === e || (e = "#" + n.hashPrefix() + e), e = b(e, o, f.absolute), !f.absolute || !e) ? e : (h = !o && e ? "/" : "", s = r.port(), s = 80 === s || 443 === s ? "" : ":" + s, [r.protocol(), "://", r.host(), s, h, e].join("")) : null
                }
            }
        }

        var v, o = [], s = null, y = !1;
        this.rule = function (n) {
            if (!h(n))throw new Error("'rule' must be a function");
            return o.push(n), this
        };
        this.otherwise = function (n) {
            if (e(n)) {
                var t = n;
                n = function () {
                    return t
                }
            } else if (!h(n))throw new Error("'rule' must be a function");
            return s = n, this
        };
        this.when = function (n, t) {
            var i, u = e(t), l, o, s;
            if (e(n) && (n = f.compile(n)), !u && !h(t) && !a(t))throw new Error("invalid 'handler' in when()");
            l = {
                matcher: function (n, t) {
                    return u && (i = f.compile(t), t = ["$match", function (n) {
                        return i.format(n)
                    }]), r(function (i, r) {
                        return c(i, t, n.exec(r.path(), r.search()))
                    }, {prefix: e(n.prefix) ? n.prefix : ""})
                }, regex: function (n, t) {
                    if (n.global || n.sticky)throw new Error("when() RegExp must not be global or sticky");
                    return u && (i = t, t = ["$match", function (n) {
                        return w(i, n)
                    }]), r(function (i, r) {
                        return c(i, t, n.exec(r.path()))
                    }, {prefix: p(n)})
                }
            };
            o = {matcher: f.isMatcher(n), regex: n instanceof RegExp};
            for (s in o)if (o[s])return this.rule(l[s](n, t));
            throw new Error("invalid 'what' in when()");
        };
        this.deferIntercept = function (n) {
            n === i && (n = !0);
            y = n
        };
        this.$get = l;
        l.$inject = ["$location", "$rootScope", "$injector", "$browser"]
    }

    function ot(n, o) {
        function ot(n) {
            return 0 === n.indexOf(".") || 0 === n.indexOf("^")
        }

        function k(n, t) {
            var s;
            if (!n)return i;
            var h = e(n), u = h ? n : n.name, c = ot(u);
            if (c) {
                if (!t)throw new Error("No reference point given for path '" + u + "'");
                t = k(t);
                for (var r = u.split("."), f = 0, l = r.length, o = t; l > f; f++)if ("" !== r[f] || 0 !== f) {
                    if ("^" !== r[f])break;
                    if (!o.parent)throw new Error("Path '" + u + "' not valid for state '" + t.name + "'");
                    o = o.parent
                } else o = t;
                r = r.slice(f).join(".");
                u = o.name + (o.name && r ? "." : "") + r
            }
            return s = tt[u], !s || !h && (h || s !== n && s.self !== n) ? i : s
        }

        function st(n, t) {
            rt[n] || (rt[n] = []);
            rt[n].push(t)
        }

        function ht(n) {
            for (var t = rt[n] || []; t.length;)ut(t.shift())
        }

        function ut(t) {
            var i, u, r;
            if (t = w(t, {
                    self: t, resolve: t.resolve || {}, toString: function () {
                        return this.name
                    }
                }), i = t.name, !e(i) || i.indexOf("@") >= 0)throw new Error("State must have a valid name");
            if (tt.hasOwnProperty(i))throw new Error("State '" + i + "'' is already defined");
            if (u = -1 !== i.indexOf(".") ? i.substring(0, i.lastIndexOf(".")) : e(t.parent) ? t.parent : y(t.parent) && e(t.parent.name) ? t.parent.name : "", u && !tt[u])return st(u, t.self);
            for (r in b)h(b[r]) && (t[r] = b[r](t, b.$delegates[r]));
            return tt[i] = t, !t[et] && t.url && n.when(t.url, ["$match", "$stateParams", function (n, i) {
                l.$current.navigable == t && d(n, i) || l.transitionTo(t, n, {inherit: !0, location: !1})
            }]), ht(i), t
        }

        function ct(n) {
            return n.indexOf("*") > -1
        }

        function lt(n) {
            var t = n.split("."), i = l.$current.name.split("."), r, u;
            if ("**" === t[0] && (i = i.slice(s(i, t[1])), i.unshift("**")), "**" === t[t.length - 1] && (i.splice(s(i, t[t.length - 2]) + 1, Number.MAX_VALUE), i.push("**")), t.length != i.length)return !1;
            for (r = 0, u = t.length; u > r; r++)"*" === t[r] && (i[r] = "*");
            return i.join("") === t.join("")
        }

        function at(n, t) {
            return e(n) && !u(t) ? b[n] : h(t) && e(n) ? (b[n] && !b.$delegates[n] && (b.$delegates[n] = b[n]), b[n] = t, this) : this
        }

        function vt(n, t) {
            return y(n) ? t = n : t.name = n, ut(t), this
        }

        function ft(n, o, s, c, y, b, rt) {
            function st(t, i, r, u) {
                var e = n.$broadcast("$stateNotFound", t, i, r), f;
                return e.defaultPrevented ? (rt.update(), ft) : e.retry ? u.$retry ? (rt.update(), ot) : (f = l.transition = o.when(e.retry), f.then(function () {
                                return f !== l.transition ? ut : (t.options.$retry = !0, l.transitionTo(t.to, t.toParams, t.options))
                            }, function () {
                                return ft
                            }), rt.update(), f) : null
            }

            function ht(n, i, r, u, e, l) {
                var w = r ? i : g(n.params.$$keys(), i), v = {$stateParams: w}, p;
                return e.resolve = y.resolve(n.resolve, v, e.resolve, n), p = [e.resolve.then(function (n) {
                    e.globals = n
                })], u && p.push(u), f(n.views, function (i, r) {
                    var u = i.resolve && i.resolve !== n.resolve ? i.resolve : {};
                    u.$template = [function () {
                        return s.load(r, {view: i, locals: v, params: w, notify: l.notify}) || ""
                    }];
                    p.push(y.resolve(u, v, e.resolve, n).then(function (f) {
                        if (h(i.controllerProvider) || a(i.controllerProvider)) {
                            var o = t.extend({}, u, v);
                            f.$$controller = c.invoke(i.controllerProvider, null, o)
                        } else f.$$controller = i.controller;
                        f.$$state = n;
                        f.$$controllerAs = i.controllerAs;
                        e[r] = f
                    }))
                }), o.all(p).then(function () {
                    return e
                })
            }

            var ut = o.reject(new Error("transition superseded")), at = o.reject(new Error("transition prevented")), ft = o.reject(new Error("transition aborted")), ot = o.reject(new Error("transition failed"));
            return nt.locals = {resolve: null, globals: {$stateParams: {}}}, l = {
                params: {},
                current: nt.self,
                $current: nt,
                transition: null
            }, l.reload = function () {
                return l.transitionTo(l.current, b, {reload: !0, inherit: !1, notify: !0})
            }, l.go = function (n, t, i) {
                return l.transitionTo(n, t, r({inherit: !0, relative: l.$current}, i))
            }, l.transitionTo = function (t, i, f) {
                var d, vt, ft, tt, ct;
                i = i || {};
                f = r({location: !0, inherit: !1, relative: null, notify: !0, reload: !1, $retry: !1}, f || {});
                var wt, a = l.$current, p = l.params, lt = a.path, e = k(t, f.relative);
                if (!u(e)) {
                    if (d = {to: t, toParams: i, options: f}, vt = st(d, a.self, p, f), vt)return vt;
                    if (t = d.to, i = d.toParams, f = d.options, e = k(t, f.relative), !u(e)) {
                        if (!f.relative)throw new Error("No such state '" + t + "'");
                        throw new Error("Could not resolve '" + t + "' from state '" + f.relative + "'");
                    }
                }
                if (e[et])throw new Error("Cannot transition to abstract state '" + t + "'");
                if (f.inherit && (i = it(b, i || {}, l.$current, e)), !e.params.$$validates(i))return ot;
                i = e.params.$$values(i);
                t = e;
                var v = t.path, s = 0, h = v[s], y = nt.locals, pt = [];
                if (!f.reload)for (; h && h === lt[s] && h.ownParams.$$equals(i, p);)y = pt[s] = h.locals, s++, h = v[s];
                if (yt(t, a, y, f))return t.self.reloadOnSearch !== !1 && rt.update(), l.transition = null, o.when(l.current);
                if (i = g(t.params.$$keys(), i || {}), f.notify && n.$broadcast("$stateChangeStart", t.self, i, a.self, p).defaultPrevented)return rt.update(), at;
                for (ft = o.when(y), tt = s; tt < v.length; tt++, h = v[tt])y = pt[tt] = w(y), ft = ht(h, i, h === t, ft, y, f);
                return ct = l.transition = ft.then(function () {
                    var r, u, e;
                    if (l.transition !== ct)return ut;
                    for (r = lt.length - 1; r >= s; r--)e = lt[r], e.self.onExit && c.invoke(e.self.onExit, e.self, e.locals.globals), e.locals = null;
                    for (r = s; r < v.length; r++)u = v[r], u.locals = pt[r], u.self.onEnter && c.invoke(u.self.onEnter, u.self, u.locals.globals);
                    return l.transition !== ct ? ut : (l.$current = t, l.current = t.self, l.params = i, dt(l.params, b), l.transition = null, f.location && t.navigable && rt.push(t.navigable.url, t.navigable.locals.globals.$stateParams, {
                            $$avoidResync: !0,
                            replace: "replace" === f.location
                        }), f.notify && n.$broadcast("$stateChangeSuccess", t.self, i, a.self, p), rt.update(!0), l.current)
                }, function (r) {
                    return l.transition !== ct ? ut : (l.transition = null, wt = n.$broadcast("$stateChangeError", t.self, i, a.self, p, r), wt.defaultPrevented || rt.update(), o.reject(r))
                })
            }, l.is = function (n, t, f) {
                f = r({relative: l.$current}, f || {});
                var e = k(n, f.relative);
                return u(e) ? l.$current !== e ? !1 : t ? d(e.params.$$values(t), b) : !0 : i
            }, l.includes = function (n, t, f) {
                if (f = r({relative: l.$current}, f || {}), e(n) && ct(n)) {
                    if (!lt(n))return !1;
                    n = l.$current.name
                }
                var o = k(n, f.relative);
                return u(o) ? u(l.$current.includes[o.name]) ? t ? d(o.params.$$values(t), b, p(t)) : !0 : !1 : i
            }, l.href = function (n, t, f) {
                var e, o;
                return (f = r({
                    lossy: !0,
                    inherit: !0,
                    absolute: !1,
                    relative: l.$current
                }, f || {}), e = k(n, f.relative), !u(e)) ? null : (f.inherit && (t = it(b, t || {}, l.$current, e)), o = e && f.lossy ? e.navigable : e, o && o.url !== i && null !== o.url ? rt.href(o.url, g(e.params.$$keys(), t || {}), {absolute: f.absolute}) : null)
            }, l.get = function (n, t) {
                if (0 === arguments.length)return v(p(tt), function (n) {
                    return tt[n].self
                });
                var i = k(n, t || l.$current);
                return i && i.self ? i.self : null
            }, l
        }

        function yt(n, t, i, r) {
            if (n === t && (i === t.locals && !r.reload || n.self.reloadOnSearch === !1))return !0
        }

        var nt, l, tt = {}, rt = {}, et = "abstract", b = {
            parent: function (n) {
                if (u(n.parent) && n.parent)return k(n.parent);
                var t = /^(.+)\.[^.]+$/.exec(n.name);
                return t ? k(t[1]) : nt
            }, data: function (n) {
                return n.parent && n.parent.data && (n.data = n.self.data = r({}, n.parent.data, n.data)), n.data
            }, url: function (n) {
                var t = n.url, i = {params: n.params || {}};
                if (e(t))return "^" == t.charAt(0) ? o.compile(t.substring(1), i) : (n.parent.navigable || nt).url.concat(t, i);
                if (!t || o.isMatcher(t))return t;
                throw new Error("Invalid url '" + t + "' in state '" + n + "'");
            }, navigable: function (n) {
                return n.url ? n : n.parent ? n.parent.navigable : null
            }, ownParams: function (n) {
                var t = n.url && n.url.params || new c.ParamSet;
                return f(n.params || {}, function (n, i) {
                    t[i] || (t[i] = new c.Param(i, null, n, "config"))
                }), t
            }, params: function (n) {
                return n.parent && n.parent.params ? r(n.parent.params.$$new(), n.ownParams) : new c.ParamSet
            }, views: function (n) {
                var t = {};
                return f(u(n.views) ? n.views : {"": n}, function (i, r) {
                    r.indexOf("@") < 0 && (r += "@" + n.parent.name);
                    t[r] = i
                }), t
            }, path: function (n) {
                return n.parent ? n.parent.path.concat(n) : []
            }, includes: function (n) {
                var t = n.parent ? r({}, n.parent.includes) : {};
                return t[n.name] = !0, t
            }, $delegates: {}
        };
        nt = ut({name: "", url: "^", views: null, abstract: !0});
        nt.navigable = null;
        this.decorator = at;
        this.state = vt;
        this.$get = ft;
        ft.$inject = ["$rootScope", "$q", "$view", "$injector", "$resolve", "$stateParams", "$urlRouter", "$location", "$urlMatcherFactory"]
    }

    function st() {
        function n(n, t) {
            return {
                load: function (i, u) {
                    var f;
                    return u = r({
                        template: null,
                        controller: null,
                        view: null,
                        locals: null,
                        notify: !0,
                        async: !0,
                        params: {}
                    }, u), u.view && (f = t.fromConfig(u.view, u.params, u.locals)), f && u.notify && n.$broadcast("$viewContentLoading", u), f
                }
            }
        }

        this.$get = n;
        n.$inject = ["$rootScope", "$templateFactory"]
    }

    function bt() {
        var n = !1;
        this.useAnchorScroll = function () {
            n = !0
        };
        this.$get = ["$anchorScroll", "$timeout", function (t, i) {
            return n ? t : function (n) {
                    i(function () {
                        n[0].scrollIntoView()
                    }, 0, !1)
                }
        }]
    }

    function ht(n, i, r, u) {
        function s() {
            return i.has ? function (n) {
                    return i.has(n) ? i.get(n) : null
                } : function (n) {
                    try {
                        return i.get(n)
                    } catch (t) {
                        return null
                    }
                }
        }

        function h(n, t) {
            var r = function () {
                return {
                    enter: function (n, t, i) {
                        t.after(n);
                        i()
                    }, leave: function (n, t) {
                        n.remove();
                        t()
                    }
                }
            }, i;
            return e ? {
                    enter: function (n, t, i) {
                        var r = e.enter(n, null, t, i);
                        r && r.then && r.then(i)
                    }, leave: function (n, t) {
                        var i = e.leave(n, t);
                        i && i.then && i.then(t)
                    }
                } : f ? (i = f && f(t, n), {
                        enter: function (n, t, r) {
                            i.enter(n, null, t);
                            r()
                        }, leave: function (n, t) {
                            i.leave(n);
                            t()
                        }
                    }) : r()
        }

        var o = s(), f = o("$animator"), e = o("$animate");
        return {
            restrict: "ECA", terminal: !0, priority: 400, transclude: "element", compile: function (i, f, e) {
                return function (i, f, o) {
                    function w() {
                        c && (c.remove(), c = null);
                        s && (s.$destroy(), s = null);
                        l && (p.leave(l, function () {
                            c = null
                        }), c = l, l = null)
                    }

                    function a(h) {
                        var c, a = lt(i, o, f, u), d = a && n.$current && n.$current.locals[a], k;
                        (h || d !== y) && (c = i.$new(), y = n.$current.locals[a], k = e(c, function (n) {
                            p.enter(n, f, function () {
                                s && s.$emit("$viewContentAnimationEnded");
                                (t.isDefined(v) && !v || i.$eval(v)) && r(n)
                            });
                            w()
                        }), l = k, s = c, s.$emit("$viewContentLoaded"), s.$eval(b))
                    }

                    var c, l, s, y, b = o.onload || "", v = o.autoscroll, p = h(o, i);
                    i.$on("$stateChangeSuccess", function () {
                        a(!1)
                    });
                    i.$on("$viewContentLoading", function () {
                        a(!1)
                    });
                    a(!0)
                }
            }
        }
    }

    function ct(n, t, i, r) {
        return {
            restrict: "ECA", priority: -400, compile: function (u) {
                var f = u.html();
                return function (u, e, o) {
                    var c = i.$current, l = lt(u, o, e, r), s = c && c.locals[l], a, h;
                    s && (e.data("$uiView", {
                        name: l,
                        state: s.$$state
                    }), e.html(s.$template ? s.$template : f), a = n(e.contents()), s.$$controller && (s.$scope = u, h = t(s.$$controller, s), s.$$controllerAs && (u[s.$$controllerAs] = h), e.data("$ngControllerController", h), e.children().data("$ngControllerController", h)), a(u))
                }
            }
        }
    }

    function lt(n, t, i, r) {
        var u = r(t.uiView || t.name || "")(n), f = i.inheritedData("$uiView");
        return u.indexOf("@") >= 0 ? u : u + "@" + (f ? f.state.name : "")
    }

    function kt(n, t) {
        var i, r = n.match(/^\s*({[^}]*})\s*$/);
        if (r && (n = t + "(" + r[1] + ")"), i = n.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/), !i || 4 !== i.length)throw new Error("Invalid state ref '" + n + "'");
        return {state: i[1], paramExpr: i[3] || null}
    }

    function at(n) {
        var t = n.parent().inheritedData("$uiView");
        if (t && t.state && t.state.name)return t.state
    }

    function vt(n, i) {
        var r = ["location", "inherit", "reload"];
        return {
            restrict: "A", require: ["?^uiSrefActive", "?^uiSrefActiveEq"], link: function (u, f, e, o) {
                var s = kt(e.uiSref, n.current.name), h = null, w = at(f) || n.$current, c = null, b = "A" === f.prop("tagName"), v = "FORM" === f[0].nodeName, k = v ? "action" : "href", y = !0, l = {
                    relative: w,
                    inherit: !0
                }, p = u.$eval(e.uiSrefOpts) || {}, a;
                t.forEach(r, function (n) {
                    n in p && (l[n] = p[n])
                });
                a = function (i) {
                    if (i && (h = t.copy(i)), y) {
                        c = n.href(s.state, h, l);
                        var r = o[1] || o[0];
                        return r && r.$$setStateInfo(s.state, h), null === c ? (y = !1, !1) : void e.$set(k, c)
                    }
                };
                s.paramExpr && (u.$watch(s.paramExpr, function (n) {
                    n !== h && a(n)
                }, !0), h = t.copy(u.$eval(s.paramExpr)));
                a();
                v || f.bind("click", function (t) {
                    var e = t.which || t.button, r, u;
                    e > 1 || t.ctrlKey || t.metaKey || t.shiftKey || f.attr("target") || (r = i(function () {
                        n.go(s.state, h, l)
                    }), t.preventDefault(), u = b && !c ? 1 : 0, t.preventDefault = function () {
                        u-- <= 0 && i.cancel(r)
                    })
                })
            }
        }
    }

    function tt(n, t, i) {
        return {
            restrict: "A", controller: ["$scope", "$element", "$attrs", function (t, r, u) {
                function s() {
                    h() ? r.addClass(o) : r.removeClass(o)
                }

                function h() {
                    return "undefined" != typeof u.uiSrefActiveEq ? f && n.is(f.name, e) : f && n.includes(f.name, e)
                }

                var f, e, o;
                o = i(u.uiSrefActiveEq || u.uiSrefActive || "", !1)(t);
                this.$$setStateInfo = function (t, i) {
                    f = n.get(t, at(r));
                    e = i;
                    s()
                };
                t.$on("$stateChangeSuccess", s)
            }]
        }
    }

    function yt(n) {
        var t = function (t) {
            return n.is(t)
        };
        return t.$stateful = !0, t
    }

    function pt(n) {
        var t = function (t) {
            return n.includes(t)
        };
        return t.$stateful = !0, t
    }

    var u = t.isDefined, h = t.isFunction, e = t.isString, y = t.isObject, a = t.isArray, f = t.forEach, r = t.extend, dt = t.copy, c;
    t.module("ui.router.util", ["ng"]);
    t.module("ui.router.router", ["ui.router.util"]);
    t.module("ui.router.state", ["ui.router.router", "ui.router.util"]);
    t.module("ui.router", ["ui.router.state"]);
    t.module("ui.router.compat", ["ui.router"]);
    rt.$inject = ["$q", "$injector"];
    t.module("ui.router.util").service("$resolve", rt);
    ut.$inject = ["$http", "$templateCache", "$injector"];
    t.module("ui.router.util").service("$templateFactory", ut);
    l.prototype.concat = function (n, t) {
        var i = {caseInsensitive: c.caseInsensitive(), strict: c.strictMode(), squash: c.defaultSquashPolicy()};
        return new l(this.sourcePath + n + this.sourceSearch, r(i, t), this)
    };
    l.prototype.toString = function () {
        return this.source
    };
    l.prototype.exec = function (n, t) {
        function l(n) {
            function t(n) {
                return n.split("").reverse().join("")
            }

            function i(n) {
                return n.replace(/\\-/, "-")
            }

            var r = t(n).split(/-(?!\\)/), u = v(r, t);
            return v(u, i).reverse()
        }

        var o = this.regexp.exec(n), f, u;
        if (!o)return null;
        t = t || {};
        var i, e, r, s = this.parameters(), a = s.length, c = this.segments.length - 1, h = {};
        if (c !== o.length - 1)throw new Error("Unbalanced capture group in route '" + this.source + "'");
        for (i = 0; c > i; i++) {
            for (r = s[i], f = this.params[r], u = o[i + 1], e = 0; e < f.replace; e++)f.replace[e].from === u && (u = f.replace[e].to);
            u && f.array === !0 && (u = l(u));
            h[r] = f.value(u)
        }
        for (; a > i; i++)r = s[i], h[r] = this.params[r].value(t[r]);
        return h
    };
    l.prototype.parameters = function (n) {
        return u(n) ? this.params[n] || null : this.$$paramNames
    };
    l.prototype.validates = function (n) {
        return this.params.$$validates(n)
    };
    l.prototype.format = function (n) {
        function b(n) {
            return encodeURIComponent(n).replace(/-/g, function (n) {
                return "%5C%" + n.charCodeAt(0).toString(16).toUpperCase()
            })
        }

        var s, w;
        n = n || {};
        var h = this.segments, c = this.parameters(), k = this.params;
        if (!this.validates(n))return null;
        for (var l = !1, d = h.length - 1, g = c.length, i = h[0], r = 0; g > r; r++) {
            var nt = d > r, o = c[r], u = k[o], y = u.value(n[o]), p = u.isOptional && u.type.equals(u.value(), y), f = p ? u.squash : !1, t = u.type.encode(y);
            if (nt) s = h[r + 1], f === !1 ? (null != t && (i += a(t) ? v(t, b).join("-") : encodeURIComponent(t)), i += s) : f === !0 ? (w = i.match(/\/$/) ? /\/?(.*)/ : /(.*)/, i += s.match(w)[1]) : e(f) && (i += f + s); else {
                if (null == t || p && f !== !1)continue;
                a(t) || (t = [t]);
                t = v(t, encodeURIComponent).join("&" + o + "=");
                i += (l ? "&" : "?") + (o + "=" + t);
                l = !0
            }
        }
        return i
    };
    o.prototype.is = function () {
        return !0
    };
    o.prototype.encode = function (n) {
        return n
    };
    o.prototype.decode = function (n) {
        return n
    };
    o.prototype.equals = function (n, t) {
        return n == t
    };
    o.prototype.$subPattern = function () {
        var n = this.pattern.toString();
        return n.substr(1, n.length - 2)
    };
    o.prototype.pattern = /.*/;
    o.prototype.toString = function () {
        return "{Type:" + this.name + "}"
    };
    o.prototype.$asArray = function (n, t) {
        function r(n, t) {
            function r(n, t) {
                return function () {
                    return n[t].apply(n, arguments)
                }
            }

            function f(n) {
                return a(n) ? n : u(n) ? [n] : []
            }

            function o(n) {
                switch (n.length) {
                    case 0:
                        return i;
                    case 1:
                        return "auto" === t ? n[0] : n;
                    default:
                        return n
                }
            }

            function s(n) {
                return !n
            }

            function e(n, t) {
                return function (i) {
                    i = f(i);
                    var r = v(i, n);
                    return t === !0 ? 0 === nt(r, s).length : o(r)
                }
            }

            function h(n) {
                return function (t, i) {
                    var u = f(t), e = f(i), r;
                    if (u.length !== e.length)return !1;
                    for (r = 0; r < u.length; r++)if (!n(u[r], e[r]))return !1;
                    return !0
                }
            }

            this.encode = e(r(n, "encode"));
            this.decode = e(r(n, "decode"));
            this.is = e(r(n, "is"), !0);
            this.equals = h(r(n, "equals"));
            this.pattern = n.pattern;
            this.$arrayMode = t
        }

        if (!n)return this;
        if ("auto" === n && !t)throw new Error("'auto' array mode is for query parameters only");
        return new r(this, n)
    };
    t.module("ui.router.util").provider("$urlMatcherFactory", ft);
    t.module("ui.router.util").run(["$urlMatcherFactory", function () {
    }]);
    et.$inject = ["$locationProvider", "$urlMatcherFactoryProvider"];
    t.module("ui.router.router").provider("$urlRouter", et);
    ot.$inject = ["$urlRouterProvider", "$urlMatcherFactoryProvider"];
    t.module("ui.router.state").value("$stateParams", {}).provider("$state", ot);
    st.$inject = [];
    t.module("ui.router.state").provider("$view", st);
    t.module("ui.router.state").provider("$uiViewScroll", bt);
    ht.$inject = ["$state", "$injector", "$uiViewScroll", "$interpolate"];
    ct.$inject = ["$compile", "$controller", "$state", "$interpolate"];
    t.module("ui.router.state").directive("uiView", ht);
    t.module("ui.router.state").directive("uiView", ct);
    vt.$inject = ["$state", "$timeout"];
    tt.$inject = ["$state", "$stateParams", "$interpolate"];
    t.module("ui.router.state").directive("uiSref", vt).directive("uiSrefActive", tt).directive("uiSrefActiveEq", tt);
    yt.$inject = ["$state"];
    pt.$inject = ["$state"];
    t.module("ui.router.state").filter("isState", yt).filter("includedByState", pt)
}(window, window.angular), function (n, t, i) {
    "use strict";
    t.module("ngCookies", ["ng"]).factory("$cookies", ["$rootScope", "$browser", function (n, r) {
        var u = {}, f = {}, e, o = !1, s = t.copy, h = t.isUndefined;
        return r.addPollFn(function () {
            var t = r.cookies();
            e != t && (e = t, s(t, f), s(t, u), o && n.$apply())
        })(), o = !0, n.$watch(function () {
            var n, e, o;
            for (n in f)h(u[n]) && r.cookies(n, i);
            for (n in u)e = u[n], t.isString(e) || (e = "" + e, u[n] = e), e !== f[n] && (r.cookies(n, e), o = !0);
            if (o)for (n in e = r.cookies(), u)u[n] !== e[n] && (h(e[n]) ? delete u[n] : u[n] = e[n])
        }), u
    }]).factory("$cookieStore", ["$cookies", function (n) {
        return {
            get: function (i) {
                return (i = n[i]) ? t.fromJson(i) : i
            }, put: function (i, r) {
                n[i] = t.toJson(r)
            }, remove: function (t) {
                delete n[t]
            }
        }
    }])
}(window, window.angular);
!function (n, t) {
    "use strict";
    function o(n) {
        return /^-?\d+\.?\d*$/.test(n.replace(/["']/g, ""))
    }

    var s = t.isDefined, f = t.isUndefined, h = t.isNumber, i = t.isObject, r = t.isArray, c = t.extend, u = t.toJson, e = t.fromJson, l = t.module("LocalStorageModule", []);
    l.provider("localStorageService", function () {
        this.prefix = "ls";
        this.storageType = "localStorage";
        this.cookie = {expiry: 30, path: "/"};
        this.notify = {setItem: !0, removeItem: !1};
        this.setPrefix = function (n) {
            this.prefix = n
        };
        this.setStorageType = function (n) {
            this.storageType = n
        };
        this.setStorageCookie = function (n, t) {
            this.cookie = {expiry: n, path: t}
        };
        this.setStorageCookieDomain = function (n) {
            this.cookie.domain = n
        };
        this.setNotify = function (n, t) {
            this.notify = {setItem: n, removeItem: t}
        };
        this.$get = ["$rootScope", "$window", "$document", "$parse", function (n, t, l, a) {
            var y, p = this, v = p.prefix, d = p.cookie, nt = p.notify, k = p.storageType;
            l ? l[0] && (l = l[0]) : l = document;
            "." !== v.substr(-1) && (v = v ? v + "." : "");
            var b = function (n) {
                return v + n
            }, w = function () {
                try {
                    var i = k in t && null !== t[k], r = b("__" + Math.round(1e7 * Math.random()));
                    return i && (y = t[k], y.setItem(r, ""), y.removeItem(r)), i
                } catch (u) {
                    return k = "cookie", n.$broadcast("LocalStorageModule.notification.error", u.message), !1
                }
            }(), it = function (t, e) {
                if (f(e) ? e = null : (i(e) || r(e) || h(+e || e)) && (e = u(e)), !w || "cookie" === p.storageType)return w || n.$broadcast("LocalStorageModule.notification.warning", "LOCAL_STORAGE_NOT_SUPPORTED"), nt.setItem && n.$broadcast("LocalStorageModule.notification.setitem", {
                    key: t,
                    newvalue: e,
                    storageType: "cookie"
                }), g(t, e);
                try {
                    (i(e) || r(e)) && (e = u(e));
                    y && y.setItem(b(t), e);
                    nt.setItem && n.$broadcast("LocalStorageModule.notification.setitem", {
                        key: t,
                        newvalue: e,
                        storageType: p.storageType
                    })
                } catch (o) {
                    return n.$broadcast("LocalStorageModule.notification.error", o.message), g(t, e)
                }
                return !0
            }, ut = function (t) {
                if (!w || "cookie" === p.storageType)return w || n.$broadcast("LocalStorageModule.notification.warning", "LOCAL_STORAGE_NOT_SUPPORTED"), ot(t);
                var i = y ? y.getItem(b(t)) : null;
                return i && "null" !== i ? "{" === i.charAt(0) || "[" === i.charAt(0) || o(i) ? e(i) : i : null
            }, ft = function (t) {
                if (!w || "cookie" === p.storageType)return w || n.$broadcast("LocalStorageModule.notification.warning", "LOCAL_STORAGE_NOT_SUPPORTED"), nt.removeItem && n.$broadcast("LocalStorageModule.notification.removeitem", {
                    key: t,
                    storageType: "cookie"
                }), tt(t);
                try {
                    y.removeItem(b(t));
                    nt.removeItem && n.$broadcast("LocalStorageModule.notification.removeitem", {
                        key: t,
                        storageType: p.storageType
                    })
                } catch (i) {
                    return n.$broadcast("LocalStorageModule.notification.error", i.message), tt(t)
                }
                return !0
            }, st = function () {
                var t, i, r;
                if (!w)return n.$broadcast("LocalStorageModule.notification.warning", "LOCAL_STORAGE_NOT_SUPPORTED"), !1;
                t = v.length;
                i = [];
                for (r in y)if (r.substr(0, t) === v)try {
                    i.push(r.substr(t))
                } catch (u) {
                    return n.$broadcast("LocalStorageModule.notification.error", u.Description), []
                }
                return i
            }, ht = function (t) {
                var r, u, f, i;
                if (t = t || "", r = v.slice(0, -1), u = new RegExp(r + "." + t), !w || "cookie" === p.storageType)return w || n.$broadcast("LocalStorageModule.notification.warning", "LOCAL_STORAGE_NOT_SUPPORTED"), rt();
                f = v.length;
                for (i in y)if (u.test(i))try {
                    ft(i.substr(f))
                } catch (e) {
                    return n.$broadcast("LocalStorageModule.notification.error", e.message), rt()
                }
                return !0
            }, et = function () {
                try {
                    return navigator.cookieEnabled || "cookie" in l && (l.cookie.length > 0 || (l.cookie = "test").indexOf.call(l.cookie, "test") > -1)
                } catch (t) {
                    return n.$broadcast("LocalStorageModule.notification.error", t.message), !1
                }
            }, g = function (t, e) {
                var c;
                if (f(e))return !1;
                if ((r(e) || i(e)) && (e = u(e)), !et())return n.$broadcast("LocalStorageModule.notification.error", "COOKIES_NOT_SUPPORTED"), !1;
                try {
                    var s = "", o = new Date, h = "";
                    (null === e ? (o.setTime(o.getTime() + -864e5), s = "; expires=" + o.toGMTString(), e = "") : 0 !== d.expiry && (o.setTime(o.getTime() + 864e5 * d.expiry), s = "; expires=" + o.toGMTString()), t) && (c = "; path=" + d.path, d.domain && (h = "; domain=" + d.domain), l.cookie = b(t) + "=" + encodeURIComponent(e) + s + c + h)
                } catch (a) {
                    return n.$broadcast("LocalStorageModule.notification.error", a.message), !1
                }
                return !0
            }, ot = function (t) {
                var u, r, i, f, o;
                if (!et())return n.$broadcast("LocalStorageModule.notification.error", "COOKIES_NOT_SUPPORTED"), !1;
                for (u = l.cookie && l.cookie.split(";") || [], r = 0; r < u.length; r++) {
                    for (i = u[r]; " " === i.charAt(0);)i = i.substring(1, i.length);
                    if (0 === i.indexOf(b(t) + "=")) {
                        f = decodeURIComponent(i.substring(v.length + t.length + 1, i.length));
                        try {
                            return o = JSON.parse(f), e(o)
                        } catch (s) {
                            return f
                        }
                    }
                }
                return null
            }, tt = function (n) {
                g(n, null)
            }, rt = function () {
                for (var r, n = null, u = v.length, i = l.cookie.split(";"), t = 0; t < i.length; t++) {
                    for (n = i[t]; " " === n.charAt(0);)n = n.substring(1, n.length);
                    r = n.substring(u, n.indexOf("="));
                    tt(r)
                }
            }, ct = function () {
                return k
            }, lt = function (n, t, r, u) {
                u = u || t;
                var f = ut(u);
                return null === f && s(r) ? f = r : i(f) && i(r) && (f = c(r, f)), a(t).assign(n, f), n.$watch(t, function (n) {
                    it(u, n)
                }, i(n[t]))
            }, at = function () {
                for (var i = 0, r = t[k], n = 0; n < r.length; n++)0 === r.key(n).indexOf(v) && i++;
                return i
            };
            return {
                isSupported: w,
                getStorageType: ct,
                set: it,
                add: it,
                get: ut,
                keys: st,
                remove: ft,
                clearAll: ht,
                bind: lt,
                deriveKey: b,
                length: at,
                cookie: {set: g, add: g, get: ot, remove: tt, clearAll: rt}
            }
        }]
    })
}(window, window.angular), function (n) {
    var t = n.module("blockUI", []);
    t.config(["$provide", "$httpProvider", function (n, t) {
        n.decorator("$exceptionHandler", ["$delegate", "$injector", function (n, t) {
            var i, r;
            return function (u, f) {
                r = r || t.get("blockUIConfig");
                r.resetOnException && (i = i || t.get("blockUI"), i.instances.reset());
                n(u, f)
            }
        }]);
        t.interceptors.push("blockUIHttpInterceptor")
    }]);
    t.run(["$document", "blockUIConfig", function (n, t) {
        t.autoInjectBodyBlock && n.find("body").append('<div block-ui="main"><\/div>')
    }]);
    t.provider("blockUIConfig", function () {
        var t = {
            templateUrl: "angular-block-ui/angular-block-ui.ng.html",
            delay: 250,
            message: "Loading ...",
            autoBlock: !0,
            resetOnException: !0,
            requestFilter: n.noop,
            autoInjectBodyBlock: !0
        };
        this.templateUrl = function (n) {
            t.templateUrl = n
        };
        this.template = function (n) {
            t.template = n
        };
        this.delay = function (n) {
            t.delay = n
        };
        this.message = function (n) {
            t.message = n
        };
        this.autoBlock = function (n) {
            t.autoBlock = n
        };
        this.resetOnException = function (n) {
            t.resetOnException = n
        };
        this.requestFilter = function (n) {
            t.requestFilter = n
        };
        this.autoInjectBodyBlock = function (n) {
            t.autoInjectBodyBlock = n
        };
        this.$get = function () {
            return t
        }
    });
    t.directive("blockUi", ["blockUI", "blockUIConfig", "blockUiLinkFn", function (n, t, i) {
        return {
            scope: !0,
            restrict: "A",
            templateUrl: t.template ? undefined : t.templateUrl,
            template: t.template,
            link: i
        }
    }]).factory("blockUiLinkFn", ["blockUI", "blockUIUtils", function (n, t) {
        return function (i, r, u) {
            var e = r.parent(), f, h, c, o, s, l;
            e.length && (f = n, e[0].tagName === "BODY" ? h = i.$on("$viewContentLoaded", function () {
                    h();
                    i.$on("$locationChangeStart", function (n) {
                        i.state.blockCount > 0 && n.preventDefault()
                    })
                }) : (e.css("position", "relative"), c = u.blockUi ? u.blockUi : "_" + i.$id, f = n.instances.get(c), o = r.inheritedData("block-ui"), o && (f._parent = o), s = u.blockUiPattern, s && (l = t.buildRegExp(s), f.pattern(l)), i.$on("$destroy", function () {
                    f.release()
                }), f.addRef()), r.addClass("block-ui"), e.data("block-ui", f), i.state = f.state(), i.$watch("state.blocking", function (n) {
                e.attr("aria-busy", n)
            }))
        }
    }]);
    t.factory("blockUIHttpInterceptor", ["$q", "$injector", "blockUIConfig", function (n, t, i) {
        function u() {
            r = r || t.get("blockUI")
        }

        function f(n) {
            i.autoBlock && !n.$_noBlock && n.$_blocks && (u(), n.$_blocks.stop())
        }

        function e(t) {
            return f(t.config), n.reject(t)
        }

        var r;
        return {
            request: function (n) {
                return i.autoBlock && (i.requestFilter(n) === !1 ? n.$_noBlock = !0 : (u(), n.$_blocks = r.instances.locate(n), n.$_blocks.start())), n
            }, requestError: e, response: function (n) {
                return f(n.config), n
            }, responseError: e
        }
    }]);
    t.factory("blockUI", ["blockUIConfig", "$timeout", "blockUIUtils", "$document", function (t, i, r, u) {
        function s(f) {
            var s = this, h = {id: f, blockCount: 0, message: t.message, blocking: !1}, c, l = [];
            this._refs = 0;
            this.start = function (f) {
                f = h.blockCount > 0 ? f || h.message || t.message : f || t.message;
                h.message = f;
                h.blockCount++;
                var e = n.element(u[0].activeElement);
                e.length && r.isElementInBlockScope(e, s) && (s._restoreFocus = e[0], i(function () {
                    s._restoreFocus && s._restoreFocus.blur()
                }));
                c || (c = i(function () {
                    c = null;
                    h.blocking = !0
                }, t.delay))
            };
            this._cancelStartTimeout = function () {
                c && (i.cancel(c), c = null)
            };
            this.stop = function () {
                h.blockCount = Math.max(0, --h.blockCount);
                h.blockCount === 0 && s.reset(!0)
            };
            this.message = function (n) {
                h.message = n
            };
            this.pattern = function (n) {
                return n !== undefined && (s._pattern = n), s._pattern
            };
            this.reset = function (t) {
                s._cancelStartTimeout();
                h.blockCount = 0;
                h.blocking = !1;
                s._restoreFocus && (!u[0].activeElement || u[0].activeElement === o[0]) && (s._restoreFocus.focus(), s._restoreFocus = null);
                try {
                    t && n.forEach(l, function (n) {
                        n()
                    })
                } finally {
                    l.length = 0
                }
            };
            this.done = function (n) {
                l.push(n)
            };
            this.state = function () {
                return h
            };
            this.addRef = function () {
                s._refs += 1
            };
            this.release = function () {
                --s._refs <= 0 && e.instances._destroy(s)
            }
        }

        var o = u.find("body"), f = [], e;
        return f.get = function (n) {
            var t = f[n];
            return t || (t = f[n] = new s(n), f.push(t)), t
        }, f._destroy = function (t) {
            if (n.isString(t) && (t = f[t]), t) {
                t.reset();
                delete f[t.state().id];
                for (var i = f.length; --i;)if (f[i] === t) {
                    f.splice(i, 1);
                    break
                }
            }
        }, f.locate = function (n) {
            var t = [], i, u, o;
            for (r.forEachFnHook(t, "start"), r.forEachFnHook(t, "stop"), i = f.length; i--;)u = f[i], o = u._pattern, o && o.test(n.url) && t.push(u);
            return t.length === 0 && t.push(e), t
        }, r.forEachFnHook(f, "reset"), e = f.get("main"), e.addRef(), e.instances = f, e
    }]);
    t.factory("blockUIUtils", function () {
        var n = {
            buildRegExp: function (n) {
                var t = n.match(/^\/(.*)\/([gim]*)$/), i;
                if (t) i = new RegExp(t[1], t[2]); else throw Error("Incorrect regular expression format: " + n);
                return i
            }, forEachFn: function (n, t, i) {
                for (var u = n.length, r; u--;)r = n[u], r[t].apply(r, i)
            }, forEachFnHook: function (t, i) {
                t[i] = function () {
                    n.forEachFn(this, i, arguments)
                }
            }, isElementInBlockScope: function (n, t) {
                for (var i = n.inheritedData("block-ui"); i;) {
                    if (i === t)return !0;
                    i = i._parent
                }
                return !1
            }
        };
        return n
    });
    n.module("blockUI").run(["$templateCache", function (n) {
        n.put("angular-block-ui/angular-block-ui.ng.html", '<div ng-show="state.blockCount > 0" class="block-ui-overlay" ng-class="{ \'block-ui-visible\': state.blocking }"><\/div><div ng-show="state.blocking" class="block-ui-message-container" aria-live="assertive" aria-atomic="true"><div class="block-ui-message">{{ state.message }}<\/div><\/div>')
    }])
}(angular), function (n, t, i) {
    "use strict";
    t.module("ngAnimate", ["ng"]).directive("ngAnimateChildren", function () {
        return function (n, i, r) {
            r = r.ngAnimateChildren;
            t.isString(r) && 0 === r.length ? i.data("$$ngAnimateChildren", !0) : n.$watch(r, function (n) {
                    i.data("$$ngAnimateChildren", !!n)
                })
        }
    }).factory("$$animateReflow", ["$$rAF", "$document", function (n) {
        return function (t) {
            return n(function () {
                t()
            })
        }
    }]).config(["$provide", "$animateProvider", function (r, u) {
        function o(n) {
            for (var i, t = 0; t < n.length; t++)if (i = n[t], 1 == i.nodeType)return i
        }

        function l(n, t) {
            return o(n) == o(t)
        }

        var s = t.noop, f = t.forEach, a = u.$$selectors, c = t.isArray, v = t.isString, y = t.isObject, h = {running: !0}, e;
        r.decorator("$animate", ["$delegate", "$$q", "$injector", "$sniffer", "$rootElement", "$$asyncCallback", "$rootScope", "$document", "$templateRequest", "$$jqLite", function (n, i, r, p, w, b, k, d, g, nt) {
            function ft(n, t) {
                var i = n.data("$$ngAnimateState") || {};
                return t && (i.running = !0, i.structural = !0, n.data("$$ngAnimateState", i)), i.disabled || i.running && i.structural
            }

            function it(n) {
                var t, r = i.defer();
                return r.promise.$$cancelFn = function () {
                    t && t()
                }, k.$$postDigest(function () {
                    t = n(function () {
                        r.resolve()
                    })
                }), r.promise
            }

            function rt(n) {
                if (y(n))return n.tempClasses && v(n.tempClasses) && (n.tempClasses = n.tempClasses.split(/\s+/)), n
            }

            function st(n, t, i) {
                var e, o, r, u;
                return i = i || {}, e = {}, f(i, function (n, t) {
                    f(t.split(" "), function (t) {
                        e[t] = n
                    })
                }), o = Object.create(null), f((n.attr("class") || "").split(/\s+/), function (n) {
                    o[n] = !0
                }), r = [], u = [], f(t && t.classes || [], function (n, t) {
                    var i = o[t], f = e[t] || {};
                    !1 === n ? (i || "addClass" == f.event) && u.push(t) : !0 === n && (i && "removeClass" != f.event || r.push(t))
                }), 0 < r.length + u.length && [r.join(" "), u.join(" ")]
            }

            function ht(n) {
                var t, f, i, u, e;
                if (n) {
                    for (t = [], f = {}, n = n.substr(1).split("."), (p.transitions || p.animations) && t.push(r.get(a[""])), i = 0; i < n.length; i++)u = n[i], e = a[u], e && !f[u] && (t.push(r.get(e)), f[u] = !0);
                    return t
                }
            }

            function ct(n, i, r, u) {
                function l(n, t) {
                    var i = n[t], r = n["before" + t.charAt(0).toUpperCase() + t.substr(1)];
                    if (i || r)return "leave" == t && (r = i, i = null), g.push({event: t, fn: i}), d.push({
                        event: t,
                        fn: r
                    }), !0
                }

                function b(t, i, h) {
                    var c = [], l;
                    f(t, function (n) {
                        n.fn && c.push(n)
                    });
                    l = 0;
                    f(c, function (t, f) {
                        var a = function () {
                            n:{
                                if (i) {
                                    if ((i[f] || s)(), ++l < c.length)break n;
                                    i = null
                                }
                                h()
                            }
                        };
                        switch (t.event) {
                            case"setClass":
                                i.push(t.fn(n, e, o, a, u));
                                break;
                            case"animate":
                                i.push(t.fn(n, r, u.from, u.to, a));
                                break;
                            case"addClass":
                                i.push(t.fn(n, e || r, a, u));
                                break;
                            case"removeClass":
                                i.push(t.fn(n, o || r, a, u));
                                break;
                            default:
                                i.push(t.fn(n, a, u))
                        }
                    });
                    i && 0 === i.length && h()
                }

                var k = n[0], e, o;
                if (k) {
                    u && (u.to = u.to || {}, u.from = u.from || {});
                    c(r) && (e = r[0], o = r[1], e ? o ? r = e + " " + o : (r = e, i = "addClass") : (r = o, i = "removeClass"));
                    var a = "setClass" == i, nt = a || "addClass" == i || "removeClass" == i || "animate" == i, h = n.attr("class") + " " + r;
                    if (yt(h)) {
                        var v = s, y = [], d = [], p = s, w = [], g = [], h = (" " + h).replace(/\s+/g, ".");
                        return f(ht(h), function (n) {
                            !l(n, i) && a && (l(n, "addClass"), l(n, "removeClass"))
                        }), {
                            node: k,
                            event: i,
                            className: r,
                            isClassBased: nt,
                            isSetClassOperation: a,
                            applyStyles: function () {
                                u && n.css(t.extend(u.from || {}, u.to || {}))
                            },
                            before: function (n) {
                                v = n;
                                b(d, y, function () {
                                    v = s;
                                    n()
                                })
                            },
                            after: function (n) {
                                p = n;
                                b(g, w, function () {
                                    p = s;
                                    n()
                                })
                            },
                            cancel: function () {
                                y && (f(y, function (n) {
                                    (n || s)(!0)
                                }), v(!0));
                                w && (f(w, function (n) {
                                    (n || s)(!0)
                                }), p(!0))
                            }
                        }
                    }
                }
            }

            function ut(n, i, r, u, o, h, c, l) {
                function g(t) {
                    var u = "$animate:" + t;
                    y && y[u] && 0 < y[u].length && b(function () {
                        r.triggerHandler(u, {event: n, className: i})
                    })
                }

                function nt() {
                    g("before")
                }

                function it() {
                    g("after")
                }

                function w() {
                    w.hasBeenRun || (w.hasBeenRun = !0, h())
                }

                function k() {
                    if (!k.hasBeenRun) {
                        a && a.applyStyles();
                        k.hasBeenRun = !0;
                        c && c.tempClasses && f(c.tempClasses, function (n) {
                            e.removeClass(r, n)
                        });
                        var t = r.data("$$ngAnimateState");
                        t && (a && a.isClassBased ? tt(r, i) : (b(function () {
                                var t = r.data("$$ngAnimateState") || {};
                                rt == t.index && tt(r, i, n)
                            }), r.data("$$ngAnimateState", t)));
                        g("close");
                        l()
                    }
                }

                var a = ct(r, n, i, c), y, d, rt;
                if (!a || (n = a.event, i = a.className, y = t.element._data(a.node), y = y && y.events, u || (u = o ? o.parent() : r.parent()), lt(r, u)))return w(), nt(), it(), k(), s;
                u = r.data("$$ngAnimateState") || {};
                var p = u.active || {}, v = u.totalActive || 0, ut = u.last;
                if (o = !1, 0 < v) {
                    if (v = [], a.isClassBased) "setClass" == ut.event ? (v.push(ut), tt(r, i)) : p[i] && (d = p[i], d.event == n ? o = !0 : (v.push(d), tt(r, i))); else if ("leave" == n && p["ng-leave"]) o = !0; else {
                        for (d in p)v.push(p[d]);
                        u = {};
                        tt(r, !0)
                    }
                    0 < v.length && f(v, function (n) {
                        n.cancel()
                    })
                }
                if (!a.isClassBased || a.isSetClassOperation || "animate" == n || o || (o = "addClass" == n == r.hasClass(i)), o)return w(), nt(), it(), g("close"), l(), s;
                if (p = u.active || {}, v = u.totalActive || 0, "leave" == n) r.one("$destroy", function (n) {
                    n = t.element(this);
                    var i = n.data("$$ngAnimateState");
                    i && (i = i.active["ng-leave"]) && (i.cancel(), tt(n, "ng-leave"))
                });
                return e.addClass(r, "ng-animate"), c && c.tempClasses && f(c.tempClasses, function (n) {
                    e.addClass(r, n)
                }), rt = vt++, v++, p[i] = a, r.data("$$ngAnimateState", {
                    last: a,
                    active: p,
                    index: rt,
                    totalActive: v
                }), nt(), a.before(function (t) {
                    var u = r.data("$$ngAnimateState");
                    t = t || !u || !u.active[i] || a.isClassBased && u.active[i].event != n;
                    w();
                    !0 === t ? k() : (it(), a.after(k))
                }), a.cancel
            }

            function et(n) {
                (n = o(n)) && (n = t.isFunction(n.getElementsByClassName) ? n.getElementsByClassName("ng-animate") : n.querySelectorAll(".ng-animate"), f(n, function (n) {
                    n = t.element(n);
                    (n = n.data("$$ngAnimateState")) && n.active && f(n.active, function (n) {
                        n.cancel()
                    })
                }))
            }

            function tt(n, t) {
                if (l(n, w)) h.disabled || (h.running = !1, h.structural = !1); else if (t) {
                    var i = n.data("$$ngAnimateState") || {}, r = !0 === t;
                    !r && i.active && i.active[t] && (i.totalActive--, delete i.active[t]);
                    (r || !i.totalActive) && (e.removeClass(n, "ng-animate"), n.removeData("$$ngAnimateState"))
                }
            }

            function lt(n, i) {
                var f, e, o, r, u;
                if (h.disabled)return !0;
                if (l(n, w))return h.running;
                do {
                    if (0 === i.length)break;
                    if (r = l(i, w), u = r ? h : i.data("$$ngAnimateState") || {}, u.disabled)return !0;
                    r && (o = !0);
                    !1 !== f && (r = i.data("$$ngAnimateChildren"), t.isDefined(r) && (f = r));
                    e = e || u.running || u.last && !u.last.isClassBased
                } while (i = i.parent());
                return !o || !f && e
            }

            e = nt;
            w.data("$$ngAnimateState", h);
            var at = k.$watch(function () {
                return g.totalPendingRequests
            }, function (n) {
                0 === n && (at(), k.$$postDigest(function () {
                    k.$$postDigest(function () {
                        h.running = !1
                    })
                }))
            }), vt = 0, ot = u.classNameFilter(), yt = ot ? function (n) {
                    return ot.test(n)
                } : function () {
                    return !0
                };
            return {
                animate: function (n, i, r, u, f) {
                    return u = u || "ng-inline-animate", f = rt(f) || {}, f.from = r ? i : null, f.to = r ? r : i, it(function (i) {
                        return ut("animate", u, t.element(o(n)), null, null, s, f, i)
                    })
                }, enter: function (i, r, u, f) {
                    return f = rt(f), i = t.element(i), r = r && t.element(r), u = u && t.element(u), ft(i, !0), n.enter(i, r, u), it(function (n) {
                        return ut("enter", "ng-enter", t.element(o(i)), r, u, s, f, n)
                    })
                }, leave: function (i, r) {
                    return r = rt(r), i = t.element(i), et(i), ft(i, !0), it(function (u) {
                        return ut("leave", "ng-leave", t.element(o(i)), null, null, function () {
                            n.leave(i)
                        }, r, u)
                    })
                }, move: function (i, r, u, f) {
                    return f = rt(f), i = t.element(i), r = r && t.element(r), u = u && t.element(u), et(i), ft(i, !0), n.move(i, r, u), it(function (n) {
                        return ut("move", "ng-move", t.element(o(i)), r, u, s, f, n)
                    })
                }, addClass: function (n, t, i) {
                    return this.setClass(n, t, [], i)
                }, removeClass: function (n, t, i) {
                    return this.setClass(n, [], t, i)
                }, setClass: function (i, r, u, e) {
                    if (e = rt(e), i = t.element(i), i = t.element(o(i)), ft(i))return n.$$setClassImmediately(i, r, u, e);
                    var h, s = i.data("$$animateClasses"), l = !!s;
                    return (s || (s = {classes: {}}), h = s.classes, r = c(r) ? r : r.split(" "), f(r, function (n) {
                        n && n.length && (h[n] = !0)
                    }), u = c(u) ? u : u.split(" "), f(u, function (n) {
                        n && n.length && (h[n] = !1)
                    }), l) ? (e && s.options && (s.options = t.extend(s.options || {}, e)), s.promise) : (i.data("$$animateClasses", s = {
                            classes: h,
                            options: e
                        }), s.promise = it(function (t) {
                            var e = i.parent(), u = o(i), f = u.parentNode, r;
                            if (!f || f.$$NG_REMOVED || u.$$NG_REMOVED) t(); else return u = i.data("$$animateClasses"), i.removeData("$$animateClasses"), f = i.data("$$ngAnimateState") || {}, r = st(i, u, f.active), r ? ut("setClass", r, i, e, null, function () {
                                    r[0] && n.$$addClassImmediately(i, r[0]);
                                    r[1] && n.$$removeClassImmediately(i, r[1])
                                }, u.options, t) : t()
                        }))
                }, cancel: function (n) {
                    n.$$cancelFn()
                }, enabled: function (n, t) {
                    switch (arguments.length) {
                        case 2:
                            if (n) tt(t); else {
                                var i = t.data("$$ngAnimateState") || {};
                                i.disabled = !0;
                                t.data("$$ngAnimateState", i)
                            }
                            break;
                        case 1:
                            h.disabled = !n;
                            break;
                        default:
                            n = !h.disabled
                    }
                    return !!n
                }
            }
        }]);
        u.register("", ["$window", "$sniffer", "$timeout", "$$animateReflow", function (r, u, h, l) {
            function k() {
                w || (w = l(function () {
                    ut = [];
                    w = null;
                    p = {}
                }))
            }

            function d(n, t) {
                w && w();
                ut.push(t);
                w = l(function () {
                    f(ut, function (n) {
                        n()
                    });
                    ut = [];
                    w = null;
                    p = {}
                })
            }

            function yt(n, i) {
                var r = o(n);
                n = t.element(r);
                ct.push(n);
                r = Date.now() + i;
                r <= vt || (h.cancel(at), vt = r, at = h(function () {
                    pt(ct);
                    ct = []
                }, i, !1))
            }

            function pt(n) {
                f(n, function (n) {
                    (n = n.data("$$ngAnimateCSS3Data")) && f(n.closeAnimationFns, function (n) {
                        n()
                    })
                })
            }

            function ft(n, t) {
                var i = t ? p[t] : null;
                if (!i) {
                    var u = 0, e = 0, o = 0, s = 0;
                    f(n, function (n) {
                        if (1 == n.nodeType) {
                            n = r.getComputedStyle(n) || {};
                            u = Math.max(g(n[b + "Duration"]), u);
                            e = Math.max(g(n[b + "Delay"]), e);
                            s = Math.max(g(n[y + "Delay"]), s);
                            var t = g(n[y + "Duration"]);
                            0 < t && (t *= parseInt(n[y + "IterationCount"], 10) || 1);
                            o = Math.max(t, o)
                        }
                    });
                    i = {total: 0, transitionDelay: e, transitionDuration: u, animationDelay: s, animationDuration: o};
                    t && (p[t] = i)
                }
                return i
            }

            function g(n) {
                var t = 0;
                return n = v(n) ? n.split(/\s*,\s*/) : [], f(n, function (n) {
                    t = Math.max(parseFloat(n) || 0, t)
                }), t
            }

            function wt(n, t, i, r) {
                var f, u, c, s, h, l;
                n = 0 <= ["ng-enter", "ng-leave", "ng-move"].indexOf(i);
                u = t.parent();
                c = u.data("$$ngAnimateKey");
                c || (u.data("$$ngAnimateKey", ++lt), c = lt);
                f = c + "-" + o(t).getAttribute("class");
                var u = f + " " + i, c = p[u] ? ++p[u].total : 0, s = {};
                return (0 < c && (h = i + "-stagger", s = f + " " + h, (f = !p[s]) && e.addClass(t, h), s = ft(t, s), f && e.removeClass(t, h)), e.addClass(t, i), h = t.data("$$ngAnimateCSS3Data") || {}, l = ft(t, u), f = l.transitionDuration, l = l.animationDuration, n && 0 === f && 0 === l) ? (e.removeClass(t, i), !1) : (i = r || n && 0 < f, n = 0 < l && 0 < s.animationDelay && 0 === s.animationDuration, t.data("$$ngAnimateCSS3Data", {
                        stagger: s,
                        cacheKey: u,
                        running: h.running || 0,
                        itemIndex: c,
                        blockTransition: i,
                        closeAnimationFns: h.closeAnimationFns || []
                    }), u = o(t), i && (et(u, !0), r && t.css(r)), n && (u.style[y + "PlayState"] = "paused"), !0)
            }

            function bt(n, t, i, r, u) {
                function nt() {
                    t.off(ut, tt);
                    e.removeClass(t, v);
                    e.removeClass(t, b);
                    d && h.cancel(d);
                    rt(t, i);
                    var r = o(t), n;
                    for (n in w)r.style.removeProperty(w[n])
                }

                function tt(n) {
                    n.stopPropagation();
                    var t = n.originalEvent || n;
                    n = t.$manualTimeStamp || t.timeStamp || Date.now();
                    t = parseFloat(t.elapsedTime.toFixed(3));
                    Math.max(n - ct, 0) >= it && t >= k && r()
                }

                var p = o(t), v, b, g, c, k, l, it;
                if (n = t.data("$$ngAnimateCSS3Data"), -1 != p.getAttribute("class").indexOf(i) && n) {
                    v = "";
                    b = "";
                    f(i.split(" "), function (n, t) {
                        var i = (0 < t ? " " : "") + n;
                        v += i + "-active";
                        b += i + "-pending"
                    });
                    var w = [], l = n.itemIndex, s = n.stagger, a = 0;
                    if (0 < l && (a = 0, 0 < s.transitionDelay && 0 === s.transitionDuration && (a = s.transitionDelay * l), g = 0, 0 < s.animationDelay && 0 === s.animationDuration && (g = s.animationDelay * l, w.push(ot + "animation-play-state")), a = Math.round(100 * Math.max(a, g)) / 100), a || (e.addClass(t, v), n.blockTransition && et(p, !1)), c = ft(t, n.cacheKey + " " + v), k = Math.max(c.transitionDuration, c.animationDuration), 0 === k) e.removeClass(t, v), rt(t, i), r(); else {
                        !a && u && (c.transitionDuration || (t.css("transition", c.animationDuration + "s linear all"), w.push("transition")), t.css(u));
                        l = Math.max(c.transitionDelay, c.animationDelay);
                        it = 1e3 * l;
                        0 < w.length && (s = p.getAttribute("style") || "", ";" !== s.charAt(s.length - 1) && (s += ";"), p.setAttribute("style", s + " "));
                        var ct = Date.now(), ut = ht + " " + st, l = 1e3 * (a + 1.5 * (l + k)), d;
                        0 < a && (e.addClass(t, b), d = h(function () {
                            d = null;
                            0 < c.transitionDuration && et(p, !1);
                            0 < c.animationDuration && (p.style[y + "PlayState"] = "");
                            e.addClass(t, v);
                            e.removeClass(t, b);
                            u && (0 === c.transitionDuration && t.css("transition", c.animationDuration + "s linear all"), t.css(u), w.push("transition"))
                        }, 1e3 * a, !1));
                        t.on(ut, tt);
                        return n.closeAnimationFns.push(function () {
                            nt();
                            r()
                        }), n.running++, yt(t, l), nt
                    }
                } else r()
            }

            function et(n, t) {
                n.style[b + "Property"] = t ? "none" : ""
            }

            function nt(n, t, i, r) {
                if (wt(n, t, i, r))return function (n) {
                    n && rt(t, i)
                }
            }

            function tt(n, t, i, r, u) {
                if (t.data("$$ngAnimateCSS3Data"))return bt(n, t, i, r, u);
                rt(t, i);
                r()
            }

            function it(n, t, i, r, u) {
                var e = nt(n, t, i, u.from), f;
                if (e)return f = e, d(t, function () {
                    f = tt(n, t, i, r, u.to)
                }), function (n) {
                    (f || s)(n)
                };
                k();
                r()
            }

            function rt(n, t) {
                e.removeClass(n, t);
                var i = n.data("$$ngAnimateCSS3Data");
                i && (i.running && i.running--, i.running && 0 !== i.running || n.removeData("$$ngAnimateCSS3Data"))
            }

            function a(n, t) {
                var i = "";
                return n = c(n) ? n : n.split(/\s+/), f(n, function (n, r) {
                    n && 0 < n.length && (i += (0 < r ? " " : "") + n + t)
                }), i
            }

            var ot = "", b, st, y, ht;
            n.ontransitionend === i && n.onwebkittransitionend !== i ? (ot = "-webkit-", b = "WebkitTransition", st = "webkitTransitionEnd transitionend") : (b = "transition", st = "transitionend");
            n.onanimationend === i && n.onwebkitanimationend !== i ? (ot = "-webkit-", y = "WebkitAnimation", ht = "webkitAnimationEnd animationend") : (y = "animation", ht = "animationend");
            var p = {}, lt = 0, ut = [], w, at = null, vt = 0, ct = [];
            return {
                animate: function (n, t, i, r, u, f) {
                    return f = f || {}, f.from = i, f.to = r, it("animate", n, t, u, f)
                }, enter: function (n, t, i) {
                    return i = i || {}, it("enter", n, "ng-enter", t, i)
                }, leave: function (n, t, i) {
                    return i = i || {}, it("leave", n, "ng-leave", t, i)
                }, move: function (n, t, i) {
                    return i = i || {}, it("move", n, "ng-move", t, i)
                }, beforeSetClass: function (n, t, i, r, u) {
                    if (u = u || {}, t = a(i, "-remove") + " " + a(t, "-add"), u = nt("setClass", n, t, u.from))return d(n, r), u;
                    k();
                    r()
                }, beforeAddClass: function (n, t, i, r) {
                    if (r = r || {}, t = nt("addClass", n, a(t, "-add"), r.from))return d(n, i), t;
                    k();
                    i()
                }, beforeRemoveClass: function (n, t, i, r) {
                    if (r = r || {}, t = nt("removeClass", n, a(t, "-remove"), r.from))return d(n, i), t;
                    k();
                    i()
                }, setClass: function (n, t, i, r, u) {
                    return u = u || {}, i = a(i, "-remove"), t = a(t, "-add"), tt("setClass", n, i + " " + t, r, u.to)
                }, addClass: function (n, t, i, r) {
                    return r = r || {}, tt("addClass", n, a(t, "-add"), i, r.to)
                }, removeClass: function (n, t, i, r) {
                    return r = r || {}, tt("removeClass", n, a(t, "-remove"), i, r.to)
                }
            }
        }])
    }])
}(window, window.angular);
!function () {
    "use strict";
    angular.module("angular-loading-bar", ["cfp.loadingBarInterceptor"]);
    angular.module("chieffancypants.loadingBar", ["cfp.loadingBarInterceptor"]);
    angular.module("cfp.loadingBarInterceptor", ["cfp.loadingBar"]).config(["$httpProvider", function (n) {
        var t = ["$q", "$cacheFactory", "$timeout", "$rootScope", "cfpLoadingBar", function (t, i, r, u, f) {
            function h() {
                r.cancel(c);
                f.complete();
                o = 0;
                e = 0
            }

            function s(t) {
                var u, e = i.get("$http"), f = n.defaults, r;
                return (t.cache || f.cache) && t.cache !== !1 && ("GET" === t.method || "JSONP" === t.method) && (u = angular.isObject(t.cache) ? t.cache : angular.isObject(f.cache) ? f.cache : e), r = void 0 !== u ? void 0 !== u.get(t.url) : !1, void 0 !== t.cached && r !== t.cached ? t.cached : (t.cached = r, r)
            }

            var c, e = 0, o = 0, l = f.latencyThreshold;
            return {
                request: function (n) {
                    return n.ignoreLoadingBar || s(n) || (u.$broadcast("cfpLoadingBar:loading", {url: n.url}), 0 === e && (c = r(function () {
                        f.start()
                    }, l)), e++, f.set(o / e)), n
                }, response: function (n) {
                    return n.config.ignoreLoadingBar || s(n.config) || (o++, u.$broadcast("cfpLoadingBar:loaded", {url: n.config.url}), o >= e ? h() : f.set(o / e)), n
                }, responseError: function (n) {
                    return n.config.ignoreLoadingBar || s(n.config) || (o++, u.$broadcast("cfpLoadingBar:loaded", {url: n.config.url}), o >= e ? h() : f.set(o / e)), t.reject(n)
                }
            }
        }];
        n.interceptors.push(t)
    }]);
    angular.module("cfp.loadingBar", []).provider("cfpLoadingBar", function () {
        this.includeSpinner = !0;
        this.includeBar = !0;
        this.latencyThreshold = 100;
        this.startSize = .02;
        this.parentSelector = "body";
        this.spinnerTemplate = '<div id="loading-bar-spinner"><div class="spinner-icon"><\/div><\/div>';
        this.loadingBarTemplate = '<div id="loading-bar"><div class="bar"><div class="peg"><\/div><\/div><\/div>';
        this.$get = ["$injector", "$document", "$timeout", "$rootScope", function (n, t, i, r) {
            function p() {
                u || (u = n.get("$animate"));
                var e = t.find(b).eq(0);
                i.cancel(s);
                o || (r.$broadcast("cfpLoadingBar:started"), o = !0, g && u.enter(h, e), d && u.enter(y, e), f(nt))
            }

            function f(n) {
                if (o) {
                    var t = 100 * n + "%";
                    k.css("width", t);
                    c = n;
                    i.cancel(v);
                    v = i(function () {
                        l()
                    }, 250)
                }
            }

            function l() {
                var t, n, i;
                e() >= 1 || (t = 0, n = e(), t = n >= 0 && .25 > n ? (3 * Math.random() + 3) / 100 : n >= .25 && .65 > n ? 3 * Math.random() / 100 : n >= .65 && .9 > n ? Math.random() / 50 : n >= .9 && .99 > n ? .005 : 0, i = e() + t, f(i))
            }

            function e() {
                return c
            }

            function a() {
                c = 0;
                o = !1
            }

            function w() {
                u || (u = n.get("$animate"));
                r.$broadcast("cfpLoadingBar:completed");
                f(1);
                i.cancel(s);
                s = i(function () {
                    var n = u.leave(h, a);
                    n && n.then && n.then(a);
                    u.leave(y)
                }, 500)
            }

            var u, v, s, b = this.parentSelector, h = angular.element(this.loadingBarTemplate), k = h.find("div").eq(0), y = angular.element(this.spinnerTemplate), o = !1, c = 0, d = this.includeSpinner, g = this.includeBar, nt = this.startSize;
            return {
                start: p,
                set: f,
                status: e,
                inc: l,
                complete: w,
                includeSpinner: this.includeSpinner,
                latencyThreshold: this.latencyThreshold,
                parentSelector: this.parentSelector,
                startSize: this.startSize
            }
        }]
    })
}();
angular.module("KleeJs", []);
var KleeJS;
(function (n) {
    var t = function () {
        function n(n, t) {
            var i = this;
            this.$window = n;
            this.$timeout = t;
            this.restrict = "E";
            this.transclude = !0;
            this.template = '<div style="display: block">\n<div class="klee-slider" ng-class="{\'show-state\': ShowState}">\n<a class="klee-slider-arrow prev-arrow" ng-class="{\'freeze-state\': FreezePrevAction}" ng-click="DoPrevAction()">\n            <i class="fa fa-angle-left" ng-hide="HidePrevArrow"><\/i>\n        <\/a>\n        <div class="klee-slider-viewer"><span ng-transclude><\/span><\/div>\n        <a class="klee-slider-arrow next-arrow" ng-class="{\'freeze-state\': FreezeNextAction}" ng-click="DoNextAction()">\n            <i class="fa fa-angle-right" ng-hide="HideNextArrow"><\/i>\n        <\/a>\n    <\/div>\n<\/div>';
            this.scope = {
                List: "=list",
                DisplayCount: "@displayCount",
                GutterWidth: "@gutterWidth",
                HideNextArrow: "=hideNextArrow",
                HidePrevArrow: "=hidePrevArrow",
                OnAfterPrev: "&?onAfterPrev",
                OnAfterNext: "&?onAfterNext",
                CurrentSliderIndex: "=?currentSliderIndex",
                EnableCustomArrow: "=?enableCustomArrow"
            };
            this.link = function (n, t) {
                function r(n) {
                    this.style.transform = "translateX( " + n + "px)";
                    this.style["-webkit-transform"] = "translateX( " + n + "px)";
                    this.style["-moz-transform"] = "translateX( " + n + "px)";
                    this.style["-ms-transform"] = "translateX( " + n + "px)"
                }

                function u() {
                    var n = this.getAttribute("data-original");
                    n && this.setAttribute("src", n)
                }

                var f = n.$watch("List", function (e, o) {
                    var b, k, g, a, s;
                    if (typeof o != "undefined" || e !== o) {
                        f();
                        var h = t[0], nt = h.querySelector(".klee-slider-viewer"), y = h.querySelector(".klee-slider-ul"), w = h.getBoundingClientRect().width, l = void 0;
                        n.EnableCustomArrow ? l = w : (b = h.querySelector(".prev-arrow").getBoundingClientRect().width, k = h.querySelector(".next-arrow").getBoundingClientRect().width, l = w - b - k);
                        var v = +n.List.length, d = +n.GutterWidth, c = +n.DisplayCount, p = l + d, tt = (l - n.GutterWidth * (n.DisplayCount - 1)) / n.DisplayCount;
                        nt.style.width = l + "px";
                        y.style.minWidth = p * (v / c + 1) + "px";
                        n.FreezePrevAction = !0;
                        v <= c && (n.FreezeNextAction = !0);
                        g = n.ShowState;
                        i.$timeout(function (n) {
                            var t = this.$slider, i = this.sliderItemWidth, r = [].slice.call(t.querySelectorAll(".klee-slider-li")), f = this.gutterWidth, e = this.displayCount;
                            r.map(function (n, t) {
                                var r = n.querySelector(".klee-slider-li-img");
                                n.style.width = i + "px";
                                t > 0 && (n.style.paddingLeft = f + "px");
                                t < e && r && u.call(r)
                            });
                            n.ShowState = !0
                        }.bind({$slider: h, sliderItemWidth: tt, gutterWidth: d, displayCount: c, showState: g}, n), 0);
                        a = 0;
                        s = 0;
                        n.DoPrevAction = function () {
                            s -= 1;
                            n.CurrentSliderIndex = s;
                            a += p;
                            r.call(y, a);
                            s <= 0 ? (n.FreezePrevAction = !0, v > c && (n.FreezeNextAction = !1)) : n.FreezeNextAction = !1;
                            n.OnAfterPrev()
                        };
                        n.DoNextAction = function () {
                            var t = [].slice.call(h.querySelectorAll(".klee-slider-li"));
                            s += 1;
                            n.CurrentSliderIndex = s;
                            a -= p;
                            r.call(y, a);
                            t.splice(s * c, c).map(function (n) {
                                var t = n.querySelector(".klee-slider-li-img");
                                t && u.call(t)
                            });
                            (s + 1) * c >= v ? (n.FreezeNextAction = !0, s >= 1 && (n.FreezePrevAction = !1)) : n.FreezePrevAction = !1;
                            n.OnAfterNext()
                        }
                    }
                })
            }
        }

        return n.factory = function () {
            var t = function (t, i) {
                return new n(t, i)
            };
            return t.$inject = ["$window", "$timeout"], t
        }, n
    }();
    n.SliderDirective = t;
    angular.module("KleeJs").directive("kleeSlider", t.factory())
})(KleeJS || (KleeJS = {}))